美文网首页
有意义的命名

有意义的命名

作者: denuth | 来源:发表于2017-05-07 21:44 被阅读0次

    名副其实

    变量名应该告诉你:他为什么会存在,他做什么事,他应该怎么用

    如果名称需要注释来补充,那就不算名副其实

    public List<int []> getThem() { List<int[]> list1 = new ArrayList<int[]>(); for (int[] x:theList) { if (x[0] == 4) { list1.add(x); } } return list1; }
    代码整洁但是模糊,无法通过上下文阅读获取变量的意义
    public List[Cell] getFlaggedCells() { List<Cell> flaggedCells = new ArrayList<Cell>(); for (Cell cell : gameBoard) if (cell.isFlagged()) flaggedCells.add(cell); return flaggedCells; }
    修改项

    • 给固定状态特殊赋值,加强逻辑意义
    • 去掉list等无业务属性的变量名,改用flaggedList充满了业务属性啊
      <strong>总结一点</strong> :变量的来源,尽可能描述清楚变量的业务意义

    避免误导

    1 不要使用系统自带的变量名,系统的专用名来命名:hp,aix,sco等
    2 不要使用程序语言的数据类型来做变量名的组成部分:accountList,如果这个变量不是个list岂不是雪崩,可以用group,bunchof,加s来代替
    3 不要让变量名之间仅有细微的差别,鬼才看得出来
    4 最可怕的,不要在变量名中出现小写的l,大写的O,鬼知道是l还是1,是O还是0


    做有意义的区分

    如果程序员只是为了满足编译器或者解释器的需求写代码,就会制造麻烦。

    • 同一范围内两样不同的东西不能重名
    • 废话是另一种没意义的区分 ProductData
    • 冗余废话 NameString, CustomerObject
    • 数字系列命名是意义命名的对立面a1,a2

    最终一点命名要提现意义要有所区分,要区分名称,就要以<strong>读者</strong>能鉴别不同之处的方式来区分


    使用可搜索的名称

    单字母名称和数字敞亮有个问题,就是很难再一大片文字中找出来
    名称长短应与其作用于大小相对应


    避免使用编码

    编码已经太多,无畏自找麻烦
    一句话总结:不要要把代码的逻辑扔到变量命名中,变量命名的唯一目的是描述业务,加强业务可读性。

    • 匈牙利标记法(不要把变量属性扔进变量名)
    • 成员前缀(不要加奇怪的前缀做某种类型的成员表示= =有这能耐不如把代码拆小点,尽量让变量的作用在视野范围内)
    • 接口类型也不要特殊表示= =(用的不多)

    避免思维映射

    明确是王道


    类名

    类名和对象名应该是名词或名词短语


    方法名

    方法名应该是动词或者动词短语
    重载构造器时,使用描述了参数的静态工厂方法名。for 1个sanple:
    Complex fulcrumPoint = Complex.FromRealNumber(23.0);
    要好于
    Complex fulcrumPoint = new Complex(23.0);
    FromRealNumber声明成Complex的静态工厂方法,甚至还可以把构造函数声明成private,只能通过工厂方法获取对象


    别扮可爱

    = =顾名思义 不要有情绪化的 卖萌的命名

    相关文章

      网友评论

          本文标题:有意义的命名

          本文链接:https://www.haomeiwen.com/subject/aogutxtx.html