Mrli
别装作很努力,
因为结局不会陪你演戏。
Contacts:
QQ博客园

《代码整洁之道》——阅读笔记

2022/05/09 读书笔记
Word count: 983 | Reading time: 3min

代码整洁之道——阅读

第二章:有意义的命名

  1. 名副其实,在他们在的地方表达出他们含义的名称
  2. 避免误导:避免专有名词;类型符合;
  3. 做有意义的区分:变量不用再加Var来说明,即加上a和the对意思并没没有帮助
  4. 使用读得出来的名称
  5. 使用可搜索的名称:名称长短应该与作用域大小对应。单字母名称用于段方法中的本地变量
  6. 避免使用编码:匈牙利语标记:PhoneNumber phoneString、成员前缀:private String m_dsc;;接口和实现: IShapeFactory前导字母I被滥用了,其实一种废话,用了IXxxx后就没必要XxxxImpl了。
  7. 类名和对象名应该是名词或名词短语,不应该是动词:Customer、WikePage、Account,避免使用Manager、Processor、Data、Info这样的类名
  8. 方法名应当是动词或动词断句:postPayment、deletePage、save。属性访问器、修改器、断言应该根据其值命名,并根据Javabean标准加上get、set、is前缀
  9. 别扮可爱,用可爱的名称,还是要表达准确
  10. 不要添加没用的语境,比如全文都是在GPS的环境下,就不需要在AccountAddress前再加GPS前缀了

第三章:函数

  1. 短小:函数的第一规则是短小,第二条规则是还要更短小

  2. 只做一件事:值做该函数名下同一抽象层上的步骤。(编写函数毕竟就是为了把大一些的概念拆分成另一抽象层上的一系列步骤)。判断函数是否不知做了一件事,就看能不能再拆除一个函数,该函数不仅只是单纯的重新阐释其实现(比如将if拆出来做一个名为includeSetupAndTeardownsIfTestpage的函数,只是重新诠释了代码,并未改变抽象层级)。

  3. 每个函数一个抽象层级:要确保函数只做一件事,函数中的语句都要在同一抽象层级上。

    自顶向下读代码:向下规则——我们想要让每个函数后面都跟着位于下一抽象层级的函数,这样一来,在查看函数列表时,就能循着抽象层级向下阅读了。

  4. switch语句:写出短小的switch很难,if/else同理。Switch天生要做N件事,不幸我们总无法避免switch语句,不过还是能够确保每个switch都埋藏在较低的抽象层级,并且永远不重复。当然我们可以利用多态来实现这一点。

  5. 使用描述性的名称:函数越短小、功能越集中,就越便于取个好名字。别害怕长名称,长而具有描述性的名称要比短而令人费解的名称好。

    命名方式要保持一直。使用与模块名一脉相承的短语、名词和动词给函数命名。比如includeSetupAndTearDownPages、includeSetupPages、includeSuiteSetupPage、includeSetupPage,这些名词都用了类似的措辞,依序讲出一个故事

  6. 函数参数:最理想的参数数量是0;其次是1,再次是二,应该尽量避免三参数(这条根据编程语言而定)

    参数越多,测试覆盖所有可能值的组合让人生畏

  7. 一元函数:

    有返回值:

    • 操作该参数,比如将其转换为其他什么东西再输出之

    无返回值

    • 根据该参数进行指定操作,事件
  8. 参数对象:如果函数需要两个、三个或三个以上参数,就说明其中一些参数应该封装为类

  9. 动词与关键字:assertEqual改成assertExpectedEqualsActual(expected, actual)可能会好一点,这样大大减轻了记忆参数顺序的负担

  10. 无副作用:函数承诺只做一件事,但还是会做其他被藏起来的事

Author: Mrli

Link: https://nymrli.top/2022/05/09/《代码整洁之道》——阅读笔记/

Copyright: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.

< PreviousPost
爬虫App——夜神模拟器xposed+inspeckage
NextPost >
toy reimplementation of an event loop in Python[翻译]
CATALOG
  1. 1. 代码整洁之道——阅读
    1. 1.1. 第二章:有意义的命名
    2. 1.2. 第三章:函数