有意义的命名
名副其实
变量名应该告诉你:他为什么会存在,他做什么事,他应该怎么用
如果名称需要注释来补充,那就不算名副其实
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,只能通过工厂方法获取对象
别扮可爱
= =顾名思义 不要有情绪化的 卖萌的命名