写代码这件事,跟人穿衣打扮还有点像。有的代码邋里邋遢,一看就不怎么收拾,让人根本没有读下去的欲望。虽然可能逻辑上没有问题,执行起来也都正常,但代码毕竟是给人阅读的,赏心悦目不必强求,但最起码得让人一眼看过去就知道每一句话想表达的意思,这才是一份合格的代码
意思明确的方法名胜过详细的注释
一个合格的方法名,一目了然,从字面意思就能知道设计者的意图。比如:findObjectByResourceID,原来这是通过 resourceID 的方式去寻找对象。再来一个,connectToServerLocked,原来这是一个加锁同步的方式去连接服务器。感觉是不是很好,不用看注释,也不用立即去梳理代码逻辑,就能知道方法执行的操作
如果是 checkParams,是不是看不懂要做的事?只知道要检查参数,但不知道检查什么,需要进一步看看注释或者浏览一下实现逻辑。改成 checkParamsEmpty,就会好理解得多
任何一处详细的变量名不仅节省别人的时间也节省自己的时间
程序员有个不成文的规矩,喜欢用 foo 去给没有实际含义的变量做变量名。这给其他人阅读代码带来了理解上的难度,并且也在给自己将来维护代码埋坑
比如下面这段代码
1 2 3 4 5 6
| def IsPrime(n): foo = False for i in range(2, n): if n % i == 0: foo = True return not foo
|
看方法名我们知道它是要判断 n 是否为素数。当我们快速浏览代码的时候,发现返回的结果跟 foo 变量有关,所以要弄懂它。然后要继续去理解 for 循环中的变量 i,也要弄懂它。这样,起码要花时间(尽管不长)去理解 2 个变量的意思,这里,还是代码比较短,如果代码很长,有 50 行,foo 和 i 在里面各种穿插,读到后面的时候恐怕就要回头再来看一遍的含义了。改成如下
1 2 3 4 5
| def IsPrime(n): for divisor in range(2, n): if n % divisor == 0: return False return True
|
去掉了 foo(或者改成 prime 也可以),将 i 改为 divisor,减少了阅读理解的成本,可读性一下子就提高了
大部分人对程序员的印象都是油头垢面,木讷呆板,这个是外界的理解。而程序员之间的理解,就是代码了,如果代码写得也油头垢面,无法阅读,那么就真的该好好反思反思是不是可以做点小改进,让自己看起来更“整洁”一些了