没有什么比给变量命名更头痛的。类名,成员变量,全剧变量,函数还好。但是那些只用一次的变量给它们命名简直令人头痛。
同时那些a1,a2,aa,bb, 的命名方式又是很欠打的。其实对于这种只用一次的变量,真的需要一个好的方式来为他们命名。
我记得王垠大神曾经写过一篇blog,叫“解决问题和消灭问题”,而消灭问题明显要比解决问题更加的”上档次”。
如果说给临时变量一个好的命名算是处理问题,那么什么才算是消灭问题呢?我觉得就是大多数临时变量就没必要命名。
等你明白我的这句话,就会发现你命名的好坏,表示你会不会用临时变量,而这临时变量又和你的代码结构,代码的简练程度息息相关。
首先你要明白为什么要为一个变量命名。
所以我们可以根据这些,定义如下几条规则:
- 如果一个变量只使用一次,那么不要为它命名,除非为它赋值很长。(如果只是用一次,完全可以不要它)
- 不要乱缩写。result不要写成 res,department 不要写成 depart(降低可读性)
- 打死不用 aa,bb,a1,a2。(完全没有自解释,降低可读性)
下面是几个实际的例子:
只使用一次的没有必要为其命名。
1 2 3 4 5
| result = dosomething(); return result;
return dosomething();
|
能用三目运算符不用逻辑判断语句(if else)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| string oddeven(int value) { string result = ""; if(value % 2==0) { result = "even"; }else { result = "odd"; } return result; }
string oddeven(int value) { return value % 2 == 0 ? "even": "odd" }
|
如果你写了几个相似的临时变量名,那么请先想一想有没有必要取这么多?
1 2 3 4 5 6 7 8 9
| amount1 = os.query<Porjectstaff>.where(1).count(); amount2 = os.query<Projectstaff>.where(2).count(); amount3 = os.query<Porjectstaff>.where(3).count(); projectAmount = amount1 + amount2 + amount3;
projectAmount = os.query<Porjectstaff>.where(1).count(); projectAmount += os.query<Projectstaff>.where(2).count(); projectAmount += os.query<Projectstaff>.where(3).count();
|
amount1,amount2,amount3这样为每个临时变量命名,其实根本就没必要。
有个性与没个性,(有个性的单独命名,没个性的放在容器)
你可能会问我,什么叫有个性,什么叫没个性?
1 2 3 4 5 6 7 8 9 10 11 12
| int []a = {1, 2, 3, 4}; a[0] ... a[1] ... a[2] ... a[3] ...
int one = 1; int two = 2; int three = 3; int four = 4;
|
比如前段时间,我写过一个代码,提取四段字符串来生成一个项目编号。
1 2 3 4 5 6 7
| string department = Department.Abbr; string projecttype = ProjectType.Name; string serialnumber = string.Format("{0000}", SerialNumber); string year = StartDate.year;
ProjectNumber = string.Format("{0}-{1}-{2}-{3}", department, projecttype, serialnumber, year);
|
就像我之前说的那样,这种”个性”命名根本就没有必要,后面已经能够读的出来了。
所以这是我的新的写法:
1 2 3 4 5 6 7
| string []symbol = string{ Department.Abbr, ProjectType.Name, string.Format("{0000}", SerialNumber), StartDate.year } ProjectNumber = string.Format("{0}-{1}-{2}-{3}", symbol);
|
好的命名它本身的可读性。连注释都省了。