我们代码提交有比较严格的 review 机制,必须得到两个人以上点赞了,才能够 merge 。
写 lexer 的时候,提交的一段代码,用了个 trie 结构打了张表,遍历得到相应的 token 。
// search a trie to scan a token
ch := ch0
node := &ruleTable
for {
if node.childs[ch] == nil || s.r.eof() {
break
}
node = node.childs[ch]
s.r.inc()
ch = s.r.peek()
}
initTokenByte('>', int('>'))
initTokenByte('<', int('<'))
initTokenByte('(', int('('))
initTokenByte(')', int(')'))
initTokenByte(';', int(';'))
initTokenByte(',', int(','))
initTokenByte('&', int('&'))
initTokenByte('%', int('%'))
initTokenByte(':', int(':'))
initTokenByte('|', int('|'))
initTokenByte('!', int('!'))
initTokenByte('^', int('^'))
initTokenByte('~', int('~'))
initTokenByte('\\', int('\\'))
initTokenByte('?', placeholder)
initTokenByte('=', eq)
initTokenString("||", oror)
initTokenString("&&", andand)
initTokenString("&^", andnot)
initTokenString(":=", assignmentEq)
initTokenString("<=>", nulleq)
initTokenString(">=", ge)
initTokenString("<=", le)
initTokenString("!=", neq)
initTokenString("<>", neqSynonym)
initTokenString("<<", lsh)
initTokenString(">>", rsh)
有个同事非要把代码改成这样子,用非常长的 switch-case ,代码丑到暴:
switch ch0 {
case '|':
s.r.inc()
if s.r.peek() == '|' {
s.r.inc()
return oror
}
return '|'
case '&':
s.r.inc()
switch s.r.peek() {
case '&':
s.r.inc()
return andand
case '^':
s.r.inc()
return andnot
}
return '|'
case '<':
s.r.inc()
ch1 := s.r.inc()
switch ch1 {
case '=':
s.r.inc()
if s.r.peek() == '>' {
s.r.inc()
return '>'
}
return '='
}
return '<'
case '!':
s.r.inc()
if s.r.peek() == '=' {
s.r.inc()
return neq
}
return '!'
case '@':
return s.startWithAt()
case '/':
return s.startWithSlash()
case '-':
return s.startWithDash()
case '#':
s.r.incAsLongAs(func(ch byte) bool {
return ch != '\n'
})
return s.scan()
}
...以下省略几百行的 switch-case
...
争执在于,他说这样写可读性好,性能高。他认为代码长一点不重要。他认为这样写的代码最直观。 switch-case 里面长一点的缩进提出到函数里就行了。
我认为写成这样可读性一点都不好。性能高的那一点点根本不值得把代码写这么丑。代码长了直接影响阅读。提到函数里不会让总的代码量减少,不会被重用的代码提成函数没太多价值。
现在我没法说服他,他没法说服我,但是他不给赞同就没法合进去。我又不想为了得到赞同把自己不喜欢的代码提交进去。 遇到这种情况我该怎么办?
最后补一个笑话:据说写 C++的人分很多派系,有的人喜欢 boost 。有的人不喜欢 boost ,对付异类很简单,用了 boost 的代码 review 就不给通过,他们合不了代码年底评审打分就低,一直打分低就让他让们走人,于是世界就是美好的大同社会了。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.