变量与函数的命名对于大多数开发人员来说,绝对可谓一个痛处。不规范的命名往往是词不达意,经常会被搅得一头雾水,不仅影响开发效率,还拖慢了整个项目进度。

  就我接触的老项目来说,不规范的命名比比皆是。现在出现这么一种情况,一个事物对应多种变量名。“开始日期”就有三种表现形式——sDatestartDatefbrqBegin,并且在同一套业务、甚至在同一个方法中混搭使用。我最后选择了 startDate 作为新业务逻辑的变量名,startDate 也是我新增的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 // 接收参数名:fbrqBegin
function fun1(numm){
var startDate = $("input[name='sdate']").val(); // 开始日期
var endStart = $("input[name='edate']").val();
var url="${path}/web/xxx"+numm+".tag?fbrqBegin="+startDate+"&fbrqEnd="+endStart;
……
};

// 接收参数名:sdate
function fun2(numm)
{
var startDate = $("input[name='sdate']").val(); // 开始日期
var endStart = $("input[name='edate']").val();
var url="${path}/web/xxx"+numm+".tag?sdate="+startDate+"&edate="+endStart;
……
};

  不只是 “开始日期”,还有“厂商”(csmcvendor)、“产品”等都拥有多种变量名。

  若觉得有问题,要么重构,要么延续。先说说重构,此处的重构更确切说应该是改善代码可读性,重构是一种理想行为,因为它往往需要大量时间,改善代码可读性的同时,还需要不断地调试,以确保不会因为重构而引起其他模块出现bug。必须提的是,重构不列入工作绩效,在项目制软件行业,不存在重构的说法,只有能不能用。所以,你需要利用业余时间去做这些事,做得好,也许会被口头奖励,没做好,出现了意外的bug,并且没有及时修复,下个季度的绩效估计就不好看了。

  当然,不管最终结果如何,重构一定会提升我们的技术水平,对自己的技术发展来看,是稳赚不配的生意。可是你有时间去重构吗?你真的愿意冒着吃力不讨好,甚至降绩效的风险?难道不能写开源软件来提升技术吗?这是一个自己内心的博弈。我接触了不少项目,越做到后期,对老代码的吐槽就越少,因为我越来越理解当时的开发人员遇到的尴尬境地——他们也许选择了延续,或者小范围的重构。以上只针对传统软件行业项目制而言。互联网公司的产品,那就必须反复打磨,精益求精!

  最后,我也选择了在业余时间进行可控范围内的重构,毕竟是交付时间不会因为重构而延期。即使得不到物质好处,但我为了提升点技术,以及看不惯混乱的场面,当手上的代码存在引起bug的风险,我就要即使弥补。将新业务模块的参数统一规范化:

1
2
3
4
5
6
7
8
9
10
11
12
13
 // 接收参数名:startDate
function fun2(numm)
{
var startDate = $("input[name='sdate']").val(); // 开始日期
var endStart = $("input[name='edate']").val();

// 将接受参数名改为:startDate
var url="${path}/web/xxx"+numm+".tag?startDate="+startDate+"&endStart="+endStart;
……
};

// 在 fun2(numm) 对应的 servlet中
String startDate = request.getParameter("startDate");

  不能重蹈蔡桓公的覆辙:

1
2
3
4
  居十日,扁鹊望桓侯而还走。桓侯故使人问之,扁鹊曰:“疾在腠理,汤熨之所及也;在肌肤,针石之所及也;在肠胃,火齐之所及也;在骨髓,司命之所属,无奈何也。今在骨髓,臣是以无请也。”
  居五日,桓侯体痛,使人索扁鹊,已逃秦矣,桓侯遂死。

  ——摘自《扁鹊见蔡桓公》

  我的变量名除了专有名词之外,不使用拼音,并且很少用不通用不常见的缩写,基本是常见的单词缩写或者全拼。这里说一个影响比较深刻的单词——Count

1
2
3
4
5
Count
-----------------------------
英文简称 : CT
中文全称 : 计数
所属分类 : 医药卫生

  而 CT海词缩略语)也很有可能是其他单词的缩写:

1
2
3
4
5
6
7
8
其他解释
CT : Central Time 中央标准时间
CT : ComuniÓn Tradicionalista ComuniÓn Tradicionalista
CT : Court v. 献殷勤, 追求, 招致危险
CT : Carat n. 克拉, 开(以纯金为24开表示金含量的单位)
CT : Counseling and Testing 咨询和检测
CT : Computer Technician 电脑技术员
CT : Cholera Toxin 霍乱毒素

  CT 被排除了,它的确很少在程序中表示 Count,其他缩写 CNT海词缩略语):

1
2
3
4
5
6
7
8
9
10
11
12
CNT的常用相关缩略词条,共有 1 条。
------------------------------------------------------------------------
CNT : Count
中文全称:记数,记数器
词条简介:记数,记数器

CNT的其他相关缩略词条,共有 19 条。
------------------------------------------------------------------------
CNT:Country n. 国家
CNT:Carbon Nano Tube 碳纳米管
CNT:Celestial Navigation Trainer 天体导航训练设备
……

  在百度百科中 CNT百度百科) 解释如下:

1
CNT的英文全称是Carbon Nanotube。中文名称是碳纳米管,与金刚石、石墨、富勒烯一样,是碳的一种同素异形体。

  CTCNT 都容易造成歧义,直接用 Count。在我看过的文档中,多数大公司也推荐如此。

版权声明:转载请注明出处 http://zhoupq.com/不规范变量名的痛处和一点补救/