代码怎么用 代码怎么用手机打开( 四 )


— 06 —
避免使用编码
编码已经太多,无谓再自找麻烦 。把类型或作用域编进名称里面 , 徒然增加了解码的负担 。没理由要求每位新人都在弄清要应付的代码之外(那算是正常的),还要再搞懂另一种编码“语言” 。这对解决问题而言,纯属多余的负担 。带编码的名称通常也不便发音,容易打错 。
匈牙利语标记法
在往昔名称长短很重要的时代,我们毫无必要地破坏了不编码的规矩,如今后悔不迭 。Fortran语言要求首字母体现出类型,导致了编码的产生 。BASIC语言的早期版本只允许使用一个字母再加上一位数字 。匈牙利语标记法[10](Hungarian Notation , HN)将这种态势愈演愈烈 。
在Windows的C语言API的时代,HN相当重要,那时所有名称要么是一个整数句柄,要么是一个长指针或者void指针,要不然就是string的几种实现(有不同的用途和属性)之一 。那时候编译器并不做类型检查,程序员需要匈牙利语标记法来帮助自己记住类型 。
现代编程语言具有更丰富的类型系统,编译器也记得并强制使用类型 。而且,程序员趋向于使用更小的类、更短的方法 , 好让每个变量的定义都在视野范围之内 。
Java程序员不需要类型编码,因为对象是强类型的,代码编辑环境已经先进到在编译开始前就能监测到类型错误的程度!所以,如今HN和其他的类型编码形式都纯属多余 。它们增加了修改变量、函数或类的名称或类型的难度,它们增加了阅读代码的难度 , 它们制造了让编码系统误导读者的可能性 。
PhoneNumberphoneString;//name not changed when type changed!
成员前缀
也不必用m_前缀来标明成员变量 。应当把类和函数做得足够小,以消除对成员前缀的需要 。你应当使用某种可以高亮或用颜色标出成员的编辑环境 。
public class Part {private String m_dsc; // The textual descriptionvoid setName(String name) {m_dsc = name;}}--------------------------------------------------------------------------------------public class Part {String description;void setDescription(String description) {this.description = description;}}
此外,人们会很快学会无视前缀(或后缀),而只看到名称中有意义的部分 。代码读得越多,眼中就越没有前缀 。最终,前缀变作了不入法眼的废料,变作了旧代码的标志物 。
接口和实现
有时也会出现采用编码的特殊情形 。比如 , 你在做一个创建形状用的抽象工厂(Abstract Factory),该工厂是一个接口 , 要用具体类来实现 。你怎么来命名工厂和具体类呢?IShapeFactory和ShapeFactory吗?我喜欢不加修饰的接口 。前导字母I被滥用到了说好听点儿是干扰,说难听点儿根本就是废话的程度 。
我不想让用户知道我给他们的是接口 , 而就想让他们知道那是一个ShapeFactory 。如果在接口和实现中必须选其一来编码的话,我宁肯选择实现 。ShapeFactoryImp,甚至是丑陋的CShapeFactory,都比对接口名称编码好 。
-END-


代码整洁之道
作者: [美] 罗伯特·C. 马?。≧obert C. Martin)
译者: 韩磊
内容简介:
软件质量,不但依赖架构及项目管理,而且与代码质量紧密相关 。这一点,无论是敏捷开发流派还是传统开发流派,都不得不承认 。
本书提出一种观点:代码质量与其整洁度成正比 。干净的代码,既在质量上较为可靠 , 也为后期维护、升级奠定了良好基础 。作为编程领域的佼佼者,本书作者给出了一系列行之有效的整洁代码操作实践 。这些实践在本书中体现为一条条规则(或称“启示”) , 并辅以来自实际项目的正、反两面的范例 。只要遵循这些规则,就能编写出干净的代码 , 从而有效提升代码质量 。

推荐阅读