Meaningful Names
- 章节名:Meaningful Names
1. 一个好的名称应该能够反映出该类、方法或者变量的行为、存在范围、存在理由及其如何被使用等。例如:int numberOfDaysInAWeek = 7;就能清晰地表达出变量代表的意思。而如果仅仅使用int i = 7;这样会要求读代码的人去了解更多的context。 2. 名称不应该具有潜在的误导性。比如:int file = 5;这里的file是指读取的文字的行数还是字符数还是仅仅随便一个名称,不同的人会有不同的解读,应该尽量避免。其次,名称之间应该有明确的能将彼此区别开的明显特征,比如int shouldReturnFiveWhenTodayIsFriday和int shouldReturnFourWhenTodayIsFriday 特征不够明显,可以改成Five_ShouldBeReturnWhenTodayIsFriday 和 Four_ShouldBeReturnWhenTodayIsFriday ,避免潜在的错误。 3. 避免模棱两可的命名。比如String PageData和String PageInfo就会让人难以一眼看出其具体区别在哪。避免不必要的冗余。例如int variableApple和int variablePear中的variable就完全没有必要。 4. 让名字能被读出来。很容易被忽略的一点,因为程序并非只是为自己而写,更多的时间我们需要和其他人一起就程序的内容去交流,做到这点能方便交流。 5. 在给有实现关系的类命名时,通俗的做法是在子类后面加上imp,如父类是ReadFactory,子类就应该是ReadFactoryImp 6. 类的名称应该是名词,体现出作为一个类在宏观上具有的意义。方法的名称应该为动词,体现出一个方法的行为,因为方法即具体去实现动作的部分。 7. 在OO的多态中,不同的多态方法往往具有相似的名字,并通过参数的数量和类型来区别,这样会让读者不得不通过方法间细小的区别去匹配相应的实现,降低了可读性。解决方案可以是利用类的方法或者静态熟悉去取代这种方式,如以前是通过构造函数ABC(int a, int b。。。)来区别,现在可以通过ABC.setXXX()等方法来区别。 8. 保持命名的上下一致性。例如得到这个词可以有get retrive和 receive来表达,如果上面用了get,同一概念就应该保持这种用法,避免上下不连贯,造成意思的曲解。 9. 命名的时候要换位思考。如果代码是给外国人看得,起一个拼音名字就错了。 10. 命名时考虑读者缺乏上下文,因为尽量在名称中体现context。如String postCode = "CSA0001",尽管可以看出这是一个邮编但并不能推断出是哪里的邮编,换成String postCodeOfChengDu就更准确了,让人一目了然。
PhotoSynth对本书的所有笔记 · · · · · ·
-
Objects and Data Structures
1. 隐藏细节,不直接暴露数据,取而代之的是暴露给外部接口,从而外部可以操作无需依赖数据的...
-
Unit Tests
1. 单元测试在TDD中的实现原则:在写实现之前首先写出一个且仅仅一个失败的测试。然后写出仅...
-
Meaningful Names
-
Formatting
1. 方法或变量的定义与调用其的方法应该尽量紧靠,避免读程序的人到整个大类中去寻找定义,这...
-
Error Handling
今天重新读了一遍clean code的错误处理,结合自己现实中的例子,得到了一些启发。 1. 在处理...
说明 · · · · · ·
表示其中内容是对原文的摘抄