《代码整洁之道》笔记(一)有意义的命名

在编写代码的过程中,命名随处可见,做好命名这一步至关重要。下文列出了取个好名字的几条规则:

1.  名副其实

使用能够体现本意的名称,这样能够让人更容易理解和修改代码。

2. 避免误导

避免留下掩藏代码本意的错误线索,避免使用与本意相悖的词。

(1)别用accountList来指称一组账号,除非它真的是List类型(即便容器就是一个List,最好也别在名称中写出容器类型名)。如果包含账号的容器并非真是个List,就会引起错误的判断。所以,用accountGroup或bunchOfAccounts,甚至直接用accounts都会好一些。

(2)提防使用不同之处较小的名称。若想区分模块中某处的XYZControllerForEfficientHandlongOfStrings和另一处的XYZControllerForEfficientStorageOfStrings,会耗费过多时间。

(3)注意小写字母l和大写字母O,在某些情况下容易混淆为数字1和0

3. 做有意义的区分

不用数字或者无用的废话来区分

(1)常见的以数字系列命名(a1, a2, ......aN)是意义命名的对立面,这样的名称完全没有提供导向作者意图的线索。

public static void copyChars(char[] a1, char[] a2) {
    for (int i = 0; i < a1.length; i++) {
        a2[i] = a1[1];
    }
}

 正如上述代码,如若将参数换为source和destination,那就会易懂许多。

(2)假设你有一个Product类。如果还有一个ProductInfo或ProductData类,那它们的名称虽然不同,意思却没区别。Info和Data就像a、an和the一样,是意义含混的废话。

废话都是冗余,如果缺少明确约定,变量moneyAmout就与money没区别,customerInfo与customer没区别,accountData与account没区别,theMessage也与message没区别。要区分名称,就要以读者能鉴别不同之处的方式来区分。

4. 使用读得出来的名称

能读出来的名称更容易记忆,也更方便讨论。

5. 使用可搜索的名称

单字母名称和数字常量过于平常,很难很多文字中找出,因此,长名称胜于短名称。名称长短应与其作用域大小相对应。若变量或常量可能在代码中多处使用,则应赋予其以便于搜索的名字。

6. 避免使用编码

编码已经太多,无谓再自找麻烦。把类型或者作用域编进名称里面,徒然增加了解码的负担。

7. 避免思维映射

不应该让读者在脑中将你的名称翻译为他们所熟悉的名称。

8. 类名

类名和对象名应该是名词或名词短语,如Customer、Account

9. 方法名

与类名不同,方法名应是动词或动词短语,如postPayment、deletePage或save。属性访问器、修改器和断言应根据其值命名,依次加上get、set和is前缀。

10. 别扮可爱

名称不能太耍宝,言道意到即可

11. 给每个概念对应一个词

给每个抽象概念选一个词,并且一以贯之。倘若在一堆代码中,有controller,又有manager,还有driver,就会令人困惑。

12. 别用双关语

避免将同一单词用于不同目的,代码作者应尽力写出易于理解的代码,让别人能一目尽览,而不必殚精竭虑的研究。

13. 使用解决方案领域名称

代码是给程序员读的,用计算机领域类的术语来命名是一个很好的做法。比如AccountVisitor、JobQueue。

14. 使用源自所涉问题领域的名称

如果不能用程序员熟悉的术语来给手头工作命名,就采用从所涉及的问题领域而来的名称。

15. 添加有意义的语境

如果你有命名良好的类、函数或命名空间来放置名称,给读者提供语境是最好不过了。如果没有,就用最后一招———给名称添加前缀。

若你有名为firstName、lastName、street、hourseNumber、city、state变量,将他们放在一起的时候,很明确是一个地址。如果只是在一个方法中单独的看到一个state变量呢,你会理所当然得推断是一个地址吗?

可以添加前缀addrFirstName、addrLastName、addrState来提供语境。

16. 不要添加没用的语境

只要短名称足够清楚,就要比长名称好,别给名称添加不必要的语境,精确正是命名的要点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值