• 如何命名 —— 《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

         

  • 相关阅读:
    【BZOJ3626】【LNOI2014】—Lca(树链剖分)
    【BZOJ2434】【NOI2011】—阿狸的打字机(AC自动机+线段树)
    【UVA10498】—Happiness(线性规划/单纯形算法)
    【BZOJ4736】【清华集训2016】—温暖会指引我们前行(LCT)
    【BZOJ3451】【Tyvj1953】—Normal(点分治+NTT)
    【SCOI2019】—DAY2T1 湖之精灵的游戏(凸包+二分)
    【BZOJ4817】【SDOI2017】—树点涂色(LCT+树链剖分+线段树)
    【SCOI2019】—DAY2T1 RGB(容斥)
    Stargazer的分治讲义
    python datetime 模块
  • 原文地址:https://www.cnblogs.com/cly84920/p/4426815.html
Copyright © 2020-2023  润新知