写代码的一点小体会

Jan 16 2020

写代码这件事,跟人穿衣打扮还有点像。有的代码邋里邋遢,一看就不怎么收拾,让人根本没有读下去的欲望。虽然可能逻辑上没有问题,执行起来也都正常,但代码毕竟是给人阅读的,赏心悦目不必强求,但最起码得让人一眼看过去就知道每一句话想表达的意思,这才是一份合格的代码

意思明确的方法名胜过详细的注释

一个合格的方法名,一目了然,从字面意思就能知道设计者的意图。比如: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,减少了阅读理解的成本,可读性一下子就提高了

大部分人对程序员的印象都是油头垢面,木讷呆板,这个是外界的理解。而程序员之间的理解,就是代码了,如果代码写得也油头垢面,无法阅读,那么就真的该好好反思反思是不是可以做点小改进,让自己看起来更“整洁”一些了