继续探寻一下艺术,虽然说是艺术,这本书的大部分观点是直白易懂的,好处是学会了很容易应用,问题是有的时候会有点不以为然,另一个地方是读后感发挥的空间不大。
控制语句是程序的核心部分,所以从这里开始已经从表面的可读性稍微深入一点到代码中了,其写法的改变不是一点影响都没有了。
第一条规则是说判断语句 a==b,应该正着写(a==b)还是反着写(b==a)。这两个写法在逻辑上是没有区别的,但是对可读性还真产生了一些区别。要回答这个问题,首先要定义的是什么是“正”,什么是“反”。
考虑一下比较符号左右的区别是什么呢,通常比较都是拿一个变化值对比一个标准值,比如“成绩>60分”成绩是变量,60是标准。那么在我们通常的习惯中变化量在左边,标准量在右边是不是更自然一点呢?更自然一点,当然就更好读一点。
有两个有意思的反例,在我们的代码中也偶然可见。一是和null的比较,有一种说法是推荐使用null==a,而不是a==null。原因是在C语言中“a=null”也可以是一个判断语句,显然这种判断语句不是我们想要的,大概率是少写了一个等号,那么就产生了一个bug。如果反过来写 “null=a”就会产生一个编译错,就避免了上面的bug。看着挺有道理,不过有一些语言已经处理了这种情况,在Java里a=null作为判断条件也是会报错的,所以这个反例在Java里是没必要的。
第二个反例是字符串和常量的比较,常量.equals变量呢还是变量.equals常量?从语义上来说后一种符合我们的阅读习惯,不过前一种确实是有一定好处的。好处是避免了nullpointerexception,常量. equals 变量在变量为null时也能工作返回的是false,变量.equals常量在变量为空时就报错了。
小细节在第一次意识到的时候还是有点意思的。







网友评论