Clean Code 读书笔记
第二章 有意义的命名
原则:
- 名副其实
发现好的命名及时换掉旧的。变量函数或者类的名字告诉你它干什么的,它为什么存在,如果需要注视来补充说明,那就不是名副其实。 - 避免误导
尽量少用重复的名称,例如list是编程语言的库,写成accountGroup也比accountList好。👌提防使用不同之处较小的命名,XYZControllerHandlingOfString和XYZControllerForStoragheOfString。 - 做有意义的区分
不仅仅要以通过机器编译为目的,有意义的命名很重要。a,the,data,info这些词语慎重使用。customerData和customerInfo又有多大区别呢? - 使用读得出来的名称
genymdhms远远没有generationTimestamp更让人易读易记。 - 使用可搜索的名称
单个字母或者数字很难在程序中搜索到,所以长名字更适合写名字。 - 避免使用编码
- 避免思想映射
明确是王道,编写他人能理解的代码。不应该让读者翻译你的脑子中的单词到他们理解的单词。 - 类名不应当是动词,应该是名词或名词短语
- 方法名应该是动词或动词短语
- 别扮可爱
宁可明确,毋为好玩。 - 每个概念对应一个词
- 别用双关语
- 使用解决方案领域名称
- 使用源自所涉及问题领域的名称
- 添加有意义的语境
- 不要添加没用的语境
第三章 函数
在编程的早年岁月,系统由程序和子程序组成。后来,在Fortran和PL/1的年代,系统又程序,子程序和函数组成。如今,只有函数活了下来。
规则:
- 短小。
函数的第一规则时短小。第二条规则是要更小。
20世纪80年代,有人说函数不该长于一屏。话说当时,VT100屏幕只有24行,80列,而编辑器就得占据4行空间放菜单。
每个函数都只说一件事。而且每个函数都能够把你带到下一个函数。(某人写的代码每个函数都只有两行三行或者四行长)。
代码块和缩进:if,else,while等语句,其中的代码块应该只有一行,该行大抵是一个函数调用语句。这样不但能够保持函数短小,而且因为块内函数具有
描述性名称,从而增加了可读性。
这也意味着函数不应该大到足以容纳嵌套结构。所以函数的缩进层级应该不多语一层或者两层。 - 只做一件事。
函数应该只做一件事。做好这件事。只做这一件事。
怎样知道是做一件事还是做几件事。1, 你可以用TO语句来描述。为了达到什么,需要检查什么,然后做什么。
这样描述得了的话也是说明这只做了一件事。也就是说该函数只做了干函数名称下统一抽象层上的步骤。2, 你可以看看这个函数是否可以在拆分出来函数,
该函数不仅只是单纯地重新诠释其实现。 - 每个函数一个抽象层级
向下规则:自顶向下读代码,程序是一些列TO开头的段落,每一段落都描述当前抽象层级,并引用位于下一个抽象层级的后续TO起头段落。 - switch语句
利用多态来实现这一点。 - 使用描述性的名称
函数越短小,功能越集中,就越便于取一个好名字。别害怕长名字,长而具有描述性的名字要比短而费解的名字好很多。
别害怕花时间取名字,你应当尝试不同的名称,实测其阅读效果。
命名方式要保持一致。 - 函数参数
最理想的参数数量是0,然后是一,然后是二。应尽量避免使用三个参数。除非有足够的理由才能用三个以上参数。所以无论如何也不要这样做。
1,参数越少,越易于理解。2,测试越容易。 - 无副作用
- 分割指令与询问
函数要么做什么事,要么回答什么事,但是二者不可兼得。函数应该修改某对象的状态,或者返回该对象有关信息。两样都干唱会导致混乱。