目录
第一章 整洁代码
第二章 有意义的命名
在编程中,命名随处可见。我们给变量、函数、参数、类和包命名。好的命名能够代码读起来更加容易。
名副其实
一个变量的名字应该体现出这个变量要做什么事,应该怎么用。如果名称需要注释来补充,那就不算是名副其实。
int d; //消逝的时间,以日计
int daysSinceCreation
// 选择体现本意的名称能让然更容易理解和修改代码
避免误导
避免留下掩藏本意的错误线索,避免使用与本意相悖的词。例如hp、aix和sco都不该勇子啊变量名,因为他们都是UNIX平台的专有名称。
尽量避免使用List结尾。别用accountList来指称一组账号,除非它真的是个List类型。
提防使用不用之处较小的名称。例如区分:
String XYZControllerForEffientHandlingOfStrings
String XYZControllerForEffientStorageOfStrings
区分这两个变量会话费很多时间。假如相似的名称依字母顺序放在一起,且差异很明显,那就会相当的有助益。
做有意义的区分
命名变量时要做有意义的区分。例如:
getActiveAccount();
getActiveAccouts();
getActiveAccoutInfo();
函数名称没有有意义的区分,很难做出区分。accountData与account没区别,theMessage与message没区别。要区分名称,就要以读者能鉴别不用之处的方式来区分。
使用读的出来的名称
人类长于记忆和使用单词。人类进化到大脑中有那么大的一块提防用来处理语言,要利用起来。例如:
bee cee arr three cee enn tee
使用可搜索的名称
单字母名称和数字常量有个问题,就是很难在一大篇文字中找出来。找MAX_CLASS_PER_STUDENAT很容易,但找数字7就麻烦了,它可能是某些文件名或其他常量定义的一部分,出现在因不同意图而采用的各种表达式中。
不要以单字母名称仅用于短方法中的本地变量,名称长短应与其作用域大小想对应。若变量或常量可能在代码中多处使用,则应赋其以便与搜错的名称。
避免使用编码
不要使用类型编码
在强类型语言中,代码编辑环境已经先进到编译开始钱就侦测到类型错误的程度。所以将类型写到变量名中增加了修改变量、函数或类的名称或类型的难度。
不要使用成员前缀
不要使用前缀来标明成员比那两。应当把类和函数做得足够小,消除对成员前缀的需要。读的代码越多,眼中也没有前缀,最后,前缀边做来不入法眼的废料,变做来就代码的标志物。
避免映射思维
不应当让读者在闹钟把你的名称翻译为他们树枝的名称。这种问题经常出现在选择使用问题领域属于还是解决问题领域术语时。
类名
类名和对象名应该是名次或名词短语,如Customer、WikiPage、Account和AddressParser。避免使用Manager、Processor、Data、Info这样的类名。
类名不应当是动词。
方法名
方法名应当是动词或动词短语。如postPayment、deletePage。属性访问器、修改器和断言应该根据其值命名。
重载构造器时,使用描述了参数的静态工厂方法名,例如:
Complex fulcrumPoint = Complex.FromRealNumber(23.0);
小结
在我看来给类、变量、方法名起一个好的名字非常重要,在自己和其他人阅读代码时,又一个好的命名会帮助快速的理解代码,并且减少产生误导。上面使一些命名的一些技巧,在平时命名时可以运用起来。
在给变量命名时,一定要体现这个变量的它职责,它是用来存放数据呢,还是某个状态;变量的名字一定要是某个单词或单词的组合,一定不要有歧义。
命名和对象命名时应该是名词或名词短语,并且要具体一些,不要使用Data、Manager这样的命名,因为这些单词都不具体,别人看来之后不知道具体指什么。
给方法命名时一定是动词加名词的组合,最好还能够结合参数来命名,这个别人读起来如同一句话。
第三章 函数
函数是编程世界中不可少的部分,从刚开始学编程写的“Hello World”程序就开始使用函数了,但是我们是否有思考过什么样的函数才是一个好的函数?
短小的函数体
一个函数应该有几行代码呢?这个问题并没有唯一的答案。Clean Code中提到一行代码应该只有两行、三行或四行。我觉得一个函数应该在10行左右。通常这样的函数都会一幕了然,并且每个函数只做一件事。在阅读代码时,函数会依次把你带到下一个函数。这就是函数应该达到的短小的程度
代码块和缩进
在if语句、else语句、while语句的代码应该将他们封装为一个函数,这样在能够保证函数短小,并且封装好的函数在名字上也更容理解这段代码的功能,增加了文档上的价值。
小的函数体意味着不应该有着很多层的嵌套结构。所以,函数的缩进层级不该多于一层或者两层。这样的函数是易于阅读和理解。
只做一件事
函数应该只做一件事,并且做好这件事。判断一个函数是否不止做了一件事,又一个方法,就是看是否能够再拆出一个函数,该函数不仅只是单纯地重新诠释其实现。
将代码抽象成函数是为了方便代码阅读,可以过滤掉不不要的信息。可能一个函数中有需要步骤,从准备数据到计算数据可能会有多个步骤,如果我们将这些小步骤的代码封装到一个函数中,然后使用一个高抽象层的函数来调用这些小步函数,则函数还是只做来一件事。
每个函数一个抽象层级
要确保函数只做一件事,函数中的语句都要在同一抽象层级上。代码写的越具体,抽象层级却低,如果一个函数中的代码都是调用其他封装好的函数,那么这个函数抽象层级很高。
函数中混杂不同抽象层级,往往让人迷惑。读者可能无法判断某个表达式是基础概念还是细节。
自顶向下读代码:向下规则
让代码拥有自顶向下的阅读顺序。想要让每个函数后面都跟着位于下一抽象层级的函数,这样依赖,在查看函数列表时,就能按照抽象层级向下阅读了。
我们想要这样读程序:程序就像是一系列TO起头的段落,每一段都描述当前的抽象层级,并且位于一下抽象层级的后续TO起头段落。
switch语句