代码整洁之道

有意义的命名

名副其实

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

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

1
2
3
4
5
6
7
8
9
   public List<int []> getThem() {
List<int[]> list1 = new ArrayList<int[]>();
for (int[] x:theList) {
if (x[0] == 4) {
list1.add(x);
}
}
return list1;
}

代码整洁但是模糊,无法通过上下文阅读获取变量的意义

1
2
3
4
5
6
7
public List[Cell] getFlaggedCells() {
List<Cell> flaggedCells = new ArrayList<Cell>();
for (Cell cell : gameBoard)
if (cell.isFlagged())
flaggedCells.add(cell);
return flaggedCells;
}

修改项

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

避免误导

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


做有意义的区分

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

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

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


使用可搜索的名称

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


避免使用编码

编码已经太多,无畏自找麻烦,yes

一句话总结:不要要把代码的逻辑扔到变量命名中,变量命名的唯一目的是描述业务,加强业务可读性。

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

避免思维映射

明确是王道


类名

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


方法名

方法名应该是动词或者动词短语
重载构造器时,使用描述了参数的静态工厂方法名。for 1个sanple:

1
Complex fulcrumPoint = Complex.FromRealNumber(23.0);

要好于
Complex fulcrumPoint = new Complex(23.0);
FromRealNumber声明成Complex的静态工厂方法,甚至还可以把构造函数声明成private,只能通过工厂方法获取对象


别扮可爱

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

好饿好饿好饿 我真的好饿