Clean-Code: 有意义的名字
最近在看Clean-Code(代码整洁之道) 里面有些内容还是不错的,所以给大家分享下。
名副其实:
意思是说名称和意思要一致,更精确的说应该是看到名字就能想到意思。
对程序员来说取名通常是一件麻烦的事情,尤其是取一个好的名字。
这里截取一段书中的代码:
public List<int[]> GetThem() { List<int[]> list1 = new List<int[]>(); for(int[] x in theList) { if(x[0]==4) list1.Add(x); } return list1; }
这段代码有几个”名不符实”的地方。
- GetThem 是什么意思,获取他们?他们是什么?
- list1 是什么,是一个临时的变量?,还有更好的有意义的名字吗?
- for循环中的x是什么意思?,学过谭浩强的C语言的同学基本上在for循环的代码上都会使用 i ,j ,k ,x,y,z之类的变量,一般而言将这些变量更换为一个好的名字通常都是有百利而无一害的。
- 4是一个魔法数?为什么是等于4,不是等于5什么的?
我认为名副其实最重要的还是”看到名字就能自然而言想到意思”
避免误导:
意思是说名称不会误导别人,
例如取一个函数名字是ToLength32String(),但是最后返回的string长度是33,31,不是32.那么就有问题了。
在编程中最容易误导的莫过于 0 和o, 1和l 了。
如果你的VS的设置字体是:
那么你会看到
很明显的可以看到区别
做有意义的区分:
意思是说名称之间的区别要明显。
例如Customer == CustomerObject == CustomerInfo
或者Name==NameString==NameData
所以在取名称的时候,假设有一个方法叫做GetCustomer,那么就 不应该出现GetCustomerInfo,GetCustomerData,GetCustomerObject 之类的方法了。
最经典的莫过于数据库中的var1 ,var2,var3,var4…..之类的了,说得好听点是保护代码,难听点就是坑爹之类的了。
匈牙利语标记法(Hungarian Notation,HN)
在Windows的C语言API的时代,HN非常重要,传说HN是为了纪念具有传奇色彩的微软程序员Charles Simonyi。这种标记法比较简单:即变量名以表明该变量数据类型的小写字母开始。
例如szCmdLine的前缀sz代表string end of zero.以0 结尾的字符串。
strPhone,代表Phone是字符串类型。
而今,大部分语言是强类型的,代码编辑环境都已经先进到在编译开始前就侦测到类型错误的程度!,所以HN和其他类似的格式编码都多余了。
它们增加了修改变量,函数,或类的名称或类型的难度。
PhoneNumber phoneString;
//类型变化时,名称并未变化。
名字的长短:
很多程序员都喜欢短小精湛的名字,比如我,但是有时候短小精湛的名字被别人用了,无奈只能取另一个名字。
纵观大部分书籍上关于名字的长短介绍,都倾向于在名字意义明确的情况下,将名字长度尽量缩小,很多人都不喜欢长名字,比如:RenderPageWithSetupAndTeardowns。
这个名字就用了很多单词Render,Page,With,Setup ,Teardowns.
但是意义却是明确的,不会产生歧义,所以别害怕长名称,长而具有描述性的名称,要比短而令人费解的名称好。