如何命名 —— 《clean code》读后感

      命名对于可读性至关重要。优秀的命名应该有以下特点。

1)命名没有模糊性,命名本身能够具体非常高的可读性,是自解释的,好的命名可以无需配以注释就能轻易看明白。

       theList 不如 gameBoard

       x[0] == 4 不如 cell[STATUS_VALUE] == FLAGGED 不如 cell.isFlagged()

2)做有意义的区分,一词一义。如果代码中有这样的方法:

      getActiveAccount();

       getActiveAccounts();

      getActiveAccountInfo();

      会让阅读的工程师一头雾水。这三个命名表达的意思是一样的,他们的功能有什么区别吗??如果缺少明确约定,moneyAmount和money没区别,customerInfo和customer没区别,accountData和account没有区别。不要用这样相近的命名表达不一样的功能,如果要区分,请从命名上能表达出不同的地方。

3)使用读得出来的名称,别使用无谓的简写。

       genymdhms 远比不上 generationTimestamp的可读性。

      不怕命名长,怕命名没有意义。

4)名称长短应与其作用域大小相对应。短的名称只能用于小的作用域,大的作用域应使用长名称,以防止变量名冲突。

5)避免思维映射。应尽量让命名更直观,更接近真实世界的思维习惯。例如for(var i=0;i<n;i++) 这种习惯性的变量i和n都可以近一步使用可读性更直观的命名。

6)类名应该是名词或名词短语。而且命称应该更具体,不要过于抽象。

     推荐的: Customer、WikiPage、AddressParser

     不推荐的: Manager、Processor、Data、Info

     类名不应当是动词。

7)方法名应该是动词或动词短语。如 postPayment、deletePage或save。

8)添加有意义的语境。语境可以通过加前辍实现,也可以通过定义一个用于语境的类实现。前者不如后者,前者只有工程师能读明白,后者连编译器也能看明白。

     无语境的命名:firstName、lastName、street、city

     通过前辍实现语境: addrFirstName、addrLastName、addrState

     通过类实现语境: address.firstName、address.lastName、address.state

     

原文地址:https://www.cnblogs.com/cly84920/p/4426815.html