继续艺术之旅,昨天说了命名的前半部分,原则是要取一个有充分含义的名字,今天讲的是后半部分,讲的是要用一些没有歧义的名字。
这个原则和昨天的可能存在重叠的部分,不过今天这一part更强调的是尽量没有二义性。
如果只是原则,那么这又是一个所有人都能明白的事情,意义不太大。好在书中给出了一系列的例子,这些例子即可以对号入座去避免,也可以引发进一步思考。
列举如下:典型的二义性的词
filterxxx: 过滤某些数据,那么到底是保留xxx还是去除xxx呢?截然相反的含义。
limitxxx:上限下限,他的歧义之处在于xxx到底上下限这个数本身有没有超出限制是模糊的,建议改为min,max,显然取等于的时候是不超限的。
类似的start,stop:从xx开始到xx结束,歧义之处在于xx到底是否被包含是模糊的,更好的命名是first,last。
bool变量的命名,请加上判断语前缀,is,has,can等明确区分变量的true/false含义。 经C同学提醒,因为一些框架的特别处理,变量加is前缀可能带来问题,不建议使用。
还有一类高级的歧义,就是隐含意思的歧义,比如通常我们会认为getxxx是一个简单操作,是速度很快的,如果getxxx方法有一个复杂的逻辑,有较大的性能开销,请用其他词语替代,比如findxxx.。
类似的还是size(),如果本身有性能开销,请慎用此名,通常使用方会认为其开销很小而产生错误的判断。
我觉得上面这些例子本身就很有价值,在日常能注意使用就是一大进步了。如果能举一反三,触类旁通,那就进入了艺术的门槛了。
网友评论