整洁的代码:有意义的命名
2016-03-10 14:20
393 查看
名副其实
简单描述好的命名会体现它为什么会存在、做什么事、应该怎么用。如果名称需要注释来补充,就不算名副其实。
举例说明
private Integer num; //登陆次数
num给人的感觉是次数,但是不能表明”登陆”的意思。所以可以替换成
private Integer login_num;
这样即使不写注释,我们也能很清楚它的含义。
举例说明
再比如下面的判断:
if (status == 1) { … }
这里的数字1,无法看出它究竟代表什么意思,称为魔数。应该用有意义的名称代替。
if(status == USED) { … }
避免误导
简单描述程序员必须避免留下掩藏代码本意的错误线索。应当避免使用与本意相悖的词。
举例说明
(1)private String nameList;用来表示一串名字,中间用逗号隔开。
这里应该避免使用list,除非它真的是List类型,List一词对程序员有着特殊的含义。如果并不是真的List,那么就会引起错误的判断。可以修改为private String names;更好一些。
(2)不要在同一“地点”使用在“外形”上难以区分的两个名称,如XYZControllerForEffcientHandlingOfStrings和XYZControllerForEfficientStorageOfStrings。
(3)慎用小写字母l、大写字母O作为变量名。它们与数字1和0太相似了
做有意义的区分
简单描述如果程序员只是为满足编译器或者解释器的需要而写代码,就会造成麻烦。例如,因为同一作用范围内两样不同的东西不能重名。
举例说明
void copyChars(char a1[], char a2[]) {…}
void copyChars(char source[], char destination[]) {…}
显然source、destination比a1、a2像样多了,这就是有意义的区分。不要做无意义的区分,ProductInfo或ProductData里面的Info和Data就是意义含混的废话,还不如直接用Product。
废话都是冗余,要区分名称,就要以读者能鉴别出不同之处的方式来区分。
使用读得出来的名称
简单描述使用常用的,能读得出来的单词,便于交流,沟通。不要取一些傻乎乎的名字,让别人觉得很糟糕,很搞笑。
举例说明
Date genymdhms;
genymdhms是什么意思?能读的出是“生成日期,年、月、日、时、分、秒”吗?读不出来的话,还是换成generationTimestamp(生成时间戳)更好点
类名和方法名
简单描述:类名和对象名应该是名词或名词短语,如Customer、WikiPage、Account、AddressParser。类名不应该是动词。
方法名应该是动词或动词短语。如postPayment、deletePage、save。
属性访问器、修改器和断言应该根据其值命名,并加上get、set、is前缀。例如getName、setName、isPosted。
每一个概念对应一个词
简单描述给每一个抽象概念选一个词,并且一直使用。不要混用fetch、retrieve、get这些意思相近的词。例如controller、manager,最好选择其中一个,并一直使用。
别用双关语
简单描述避免将同一单词用于不同目的或者不同概念。例如add如果表示将通过增加或者连接两个现存值来获得新值,那么当表达将一个参数放到集群(collection)中这个意思时就不应该再用add,可以改用insert。
添加有意义的语境
简单描述假设firstName、lastName、street、houseNumber、city、state这些变量放在一起,则很明确的构成了一个地址。但如果只看见孤零零的state呢?你会理所当然的推断它是某个地址的一部分吗?这时最好添加前缀(如addrState),以此提供语境。必要的时候应该将这些变量和其相应的方法封装到一个类里面以增强语境。
不要添加没意义的语境
简单描述比如一个名为“Gas Station Deluxe(加油站豪华版)”的应用,给其中每个类都添加GSD前缀,例如GSDAccountAddress,这个GSD纯属多余,与当前语境毫无关联。
如果你在维护别人写的代码,或者自己旧代码,不妨试试上面这些规则,使用重构工具解决问题。效果会立竿见影,而且会持续下去。!
相关文章推荐
- 整洁的代码
- 整洁的代码系列--- Table View 代码
- Java中文编码小结
- 常用工具类之C++线程安全集合类
- C#识别图像中线的条数
- Concurrency::task(C++)
- Python下Selenium富文本框的输出处理
- C#用DES加密JAVA用DES解密,JAVA用DES加密C#用DES解密的实现
- Spring 注解学习手札(一) 构建简单Web应用
- asp.net 单位面积换算类
- c++第一次上机报告
- 深入入门正则表达式(java) - 命名捕获
- php 佛祖保佑 永无bug
- 编写java程序推荐一个好的定义log的方式——lombok
- php AES cbc模式 pkcs7 128位加密解密
- 联系人等拼音搜索算法与框架的心得
- java多线程下载
- leetcode 34. Search for a Range | Java最短代码实现
- [BAT][JAVA]定时任务之-Quartz使用篇
- git问题小结:ssh方式push代码时出现did not exit cleanly (exit code 128)