1. 避免写太长的函数。如果发现函数太大了,就应该把它拆分成几个更小的。通常我写的函数长度都不超过50行,那正好是我的笔记本电脑屏幕所能容纳的代码的行数。这样我可以一目了然的看见一个函数,而不需要滚屏。50行并不是一个很大的限制,因为函数里面比较复杂的部分,往往早就被我提取出去,做成了更小的函数,然后从原来的函数里面调用。所以我写的函数大小一般远远不足50行。
2. 每个函数只做一件简单的事情。有些人喜欢制造一些“通用”的函数,既可以做这个又可以做那个,然后他们传递一个参数来“选择”这个函数所要做的事情。这种“复用”其实是有害的。如果一个函数可能做两种不一样的事情,最好就写成两个不同的函数,否则这个函数的逻辑就不会很清晰,容易出现错误。
1. 使用有意义的函数和变量名字。如果你的函数和变量的名字,能够切实的描述它们的逻辑,那么你就不需要写注释来解释它在干什么。比如:
2. 把复杂的逻辑提取出去,做成“帮助函数”。有些人写的函数很长,以至于看不清楚里面的语句在干什么,所以他们误以为需要写注释。如果你仔细观察这些代码,就会发现不清晰的那片代码,往往可以被提取出去,做成一个函数,然后在原来的地方调用。由于函数有一个名字,这样你就可以使用有意义的函数名来代替注释。举一个例子:
1. 避免使用i++和++i。这种自增减操作表达式含义很蹊跷,非常容易搞混淆。而且含有它们的表达式的结果,有可能取决于参数的求值顺序。其实这两个表达式完全可以分解成两步做,把读写操作分开:一步更新i的值,另外一步使用i的值。比如,如果你想写foo(i++),你完全可以把它拆成int t = i; i += 1; foo(t);。如果你想写foo(++i),可以拆成i += 1; foo(i); 拆开之后的代码,含义完全一致,却清晰很多。到底更新是在取值之前还是之后,非常的明显。
2. 永远不要省略花括号。很多语言允许你在某种情况下省略掉花括号,比如C,Java都允许你在if语句里面只有一句话的时候省略掉花括号:
3. 合理使用括号,不要盲目依赖操作符优先级。利用操作符的优先级来减少括号,对于1+2*3这样常见的算数表达式,是没问题的。然而有些人如此的仇恨括号,以至于他们会写出2 << 7 - 2 * 3这样的表达式,而完全不用括号。
4. 避免使用continue和break。循环语句(for,while)里面出现return是没问题的,但是如果使用了continue或者break,就会让循环的逻辑和终止条件变得复杂,难以确保正确。如果只有一个continue或者break也许还好,但是如果你的循环语句里面出现了多个continue或者break,你就该考虑改写整个循环了。