Clean Code Note

Clean Code 读书笔记

第二章 有意义的命名

原则:

  1. 名副其实
    发现好的命名及时换掉旧的。变量函数或者类的名字告诉你它干什么的,它为什么存在,如果需要注视来补充说明,那就不是名副其实。
  2. 避免误导
    尽量少用重复的名称,例如list是编程语言的库,写成accountGroup也比accountList好。👌提防使用不同之处较小的命名,XYZControllerHandlingOfString和XYZControllerForStoragheOfString。
  3. 做有意义的区分
    不仅仅要以通过机器编译为目的,有意义的命名很重要。a,the,data,info这些词语慎重使用。customerData和customerInfo又有多大区别呢?
  4. 使用读得出来的名称
    genymdhms远远没有generationTimestamp更让人易读易记。
  5. 使用可搜索的名称
    单个字母或者数字很难在程序中搜索到,所以长名字更适合写名字。
  6. 避免使用编码
  7. 避免思想映射
    明确是王道,编写他人能理解的代码。不应该让读者翻译你的脑子中的单词到他们理解的单词。
  8. 类名不应当是动词,应该是名词或名词短语
  9. 方法名应该是动词或动词短语
  10. 别扮可爱
    宁可明确,毋为好玩。
  11. 每个概念对应一个词
  12. 别用双关语
  13. 使用解决方案领域名称
  14. 使用源自所涉及问题领域的名称
  15. 添加有意义的语境
  16. 不要添加没用的语境

第三章 函数

在编程的早年岁月,系统由程序和子程序组成。后来,在Fortran和PL/1的年代,系统又程序,子程序和函数组成。如今,只有函数活了下来。
规则:

  1. 短小。
    函数的第一规则时短小。第二条规则是要更小。
    20世纪80年代,有人说函数不该长于一屏。话说当时,VT100屏幕只有24行,80列,而编辑器就得占据4行空间放菜单。
    每个函数都只说一件事。而且每个函数都能够把你带到下一个函数。(某人写的代码每个函数都只有两行三行或者四行长)。
    代码块和缩进:if,else,while等语句,其中的代码块应该只有一行,该行大抵是一个函数调用语句。这样不但能够保持函数短小,而且因为块内函数具有
    描述性名称,从而增加了可读性。
    这也意味着函数不应该大到足以容纳嵌套结构。所以函数的缩进层级应该不多语一层或者两层。
  2. 只做一件事。
    函数应该只做一件事。做好这件事。只做这一件事。
    怎样知道是做一件事还是做几件事。1, 你可以用TO语句来描述。为了达到什么,需要检查什么,然后做什么。
    这样描述得了的话也是说明这只做了一件事。也就是说该函数只做了干函数名称下统一抽象层上的步骤。2, 你可以看看这个函数是否可以在拆分出来函数,
    该函数不仅只是单纯地重新诠释其实现。
  3. 每个函数一个抽象层级
    向下规则:自顶向下读代码,程序是一些列TO开头的段落,每一段落都描述当前抽象层级,并引用位于下一个抽象层级的后续TO起头段落。
  4. switch语句
    利用多态来实现这一点。
  5. 使用描述性的名称
    函数越短小,功能越集中,就越便于取一个好名字。别害怕长名字,长而具有描述性的名字要比短而费解的名字好很多。
    别害怕花时间取名字,你应当尝试不同的名称,实测其阅读效果。
    命名方式要保持一致。
  6. 函数参数
    最理想的参数数量是0,然后是一,然后是二。应尽量避免使用三个参数。除非有足够的理由才能用三个以上参数。所以无论如何也不要这样做。
    1,参数越少,越易于理解。2,测试越容易。
  7. 无副作用
  8. 分割指令与询问
    函数要么做什么事,要么回答什么事,但是二者不可兼得。函数应该修改某对象的状态,或者返回该对象有关信息。两样都干唱会导致混乱。