| 查看: 754 | 回复: 4 | |||
yalefield金虫 (文坛精英)
老汉一枚
|
[交流]
【转帖】世上最糟糕的两个变量名 已有4人参与
|
|
Andy Lester 最近我对Steve McConnell的著作Code Complete(第二版)做了技术校对,这本书将在六月份出版。 他真是用心良苦,竟然用掉了整整一章的篇幅来讨论如何给变量命名。 但有个问题,他只是点到为止,并没有深入的探讨,这个问题就是:有两个世上最糟糕的变量名称。 请允许我就此问题发表拙见。 糟糕的变量名几乎到处都是。 常见的一种情况是人们喜欢把变量名的到很短、但变量的生存范围又太大,比如,有人会在整个程序里使用像 $n 这样的变量。 有些程序员可能会知道,在 TRS-80 BASIC语 言里, 只是变量名的前两位字符是有意义的,以至于我们编程是必须把一个手抄本的变量名表格放在键盘旁边参考。 有些时候你会发现某些人命名变量的简化策略是把单词中的元音去掉,用此来替换简单的截取的方式,于是本来是 $cust 的变量名变成了 $cstmr。我很怀疑人们能否分清这个变量是代表 customers 呢,还是表示 costumers! 有时候你会发现有些变量名是故意起的很怪,作者觉得这样做非常有趣,而不是非常有用。我曾经看到一个循环语句里被命名为 $crap(屎) 的变量。我的一位同事在维护旧代码时,把一个函数命名为 THE_LONE_RANGER_RIDES_AGAIN() (“徘徊者”号航天器又能起飞了)。 这类变量名都不是我在这里要说的糟糕的变量名。 关于变量命名规范之争通常会演化为一场关于宗教信仰的战争,但是,我确有十足的信心来宣布这 世上最糟糕的变量名是: 当然,它确实表明这是个数据!它表明变量里能放什么东西!它表明变量里什么都能放!就像是你收拾打包你的物品,把它们移到一个新房子里,你在包箱外面写着,用很粗的黑字写着:“东西”。 即使这个变量是个函数指针,它里面的数据也是告诉程序何处去运行这个函数。 即使这个变量是 undef 或 NULL, 包含这种值的变量本身就具有特殊意义。 变量名应该表明变量里装载了什么数据。 问问自己“是什么数据”,这是优化你的变量命名最简单的方法。我曾经看到有人用 $data 表示从数据表里读取的一条记录。写法就像这样: 问问自己”是什么数据“将会立即给你一个好的命名思路。 命名成 $record 就好多了。 $customer_record 那就更好了。 我开篇就说过有两个最糟糕的变量名,我相信没有人会反对我提出这 世上第二糟糕的变量名 是: 非常普遍,当任何一个变量依赖于序列号来区别跟它相似的数据时,你需要立即重新考虑这个变量命名。 常常你会看到像这样的代码: 让我们用考古学的方式挖掘这段代码。 首先,这段代码只是指明了订单的总额, $total。如果没有其它的,这个 $total 定义的无可挑剔。 可不幸的是,有人在此之后加了一段代码,用来处理折扣和税率,偷懒的将它们存到 $total2里。 最后,有人又加了一段,用来检查用户支付的总值,并把变量命名为 $total3。 这段代码里最关键的能反映问题的一句是: 如果你不回头看看这两个total都是存的什么,你不可能知道这句是在计算什么。 如果你正在面临着要给某变量命名成 $total2 的问题, 请先把已有的变量名变的更有意义。 花上几分钟的时间,给这些变量合适的名称。这个层面上的代码反省是你能做到的最简单的,成本最低的,形式最安全的反省, 特别是当这个变量在一个封闭的子程序里时,更需要这样。 让我们对上面这段糟糕的代码做一个简单的查找替换过程: 变化的只有变量名,这样一来这段代码就很容易理解了。 现在所有的 _total 变量都不存在歧义了。 而且,你会发现: if 比较语句写颠倒了。 有效的命名让这种错误极易发现。 这种以数字结尾的变量并不是都不好,有个例外。如果这个实体本身就是以数字结尾的,变量也应该留下这个数字。对于跨省的国道的变量命 名就应该像 $route31。如果你把它改成 $route_thirty_one 那就有点傻了。 最后,记着这些命名习惯对于定义程序变量和定义文件名同样适用。 我通常也不愿意花太多的时间去考虑文件的命名,当然这是另外一个话题了。 还有什么其他的让你抓狂的命名现象? http://www.oreillynet.com/onlamp/blog/2004/03/the_worlds_two_worst_variable.html [ Last edited by yalefield on 2010-5-12 at 00:19 ] |
» 猜你喜欢
实验室接单子
已经有4人回复
全日制(定向)博士
已经有4人回复
假如你的研究生提出不合理要求
已经有6人回复
对氯苯硼酸纯化
已经有3人回复
求助:我三月中下旬出站,青基依托单位怎么办?
已经有12人回复
不自信的我
已经有12人回复
所感
已经有4人回复
论文终于录用啦!满足毕业条件了
已经有28人回复
要不要辞职读博?
已经有7人回复
北核录用
已经有3人回复
» 本主题相关价值贴推荐,对您同样有帮助:
哪位大侠会udf中利用scheme macros进行变量的更改????求救呀
已经有5人回复
origin作图:如何把三个变量做在一张图中
已经有22人回复
两个独立的正态随机变量,其平方和开方服从什么分布呢?
已经有7人回复
做消费行为研究,两个问题得分相乘得出来的分数是不是连续变量?
已经有4人回复
可调设计变量取哪些?
已经有1人回复
在origin中如何画两个不相关的自变量一个因变量的曲线?
已经有4人回复
【求助】gambit2.4.6和fluent6.3.26安装好以后必须设置环境变量吗?如何设置?
已经有12人回复
【求助】关于VS2008的环境变量的设置
已经有8人回复

2楼2010-05-12 08:50:33
sxlion811
金虫 (正式写手)
- 程序强帖: 3
- 应助: 12 (小学生)
- 贵宾: 0.128
- 金币: 1078.7
- 散金: 2188
- 红花: 3
- 帖子: 868
- 在线: 444.3小时
- 虫号: 479151
- 注册: 2007-12-14
- 专业: 食品科学

3楼2010-05-13 08:29:37
wangen994
荣誉版主 (著名写手)
将军
- 程序强帖: 1
- 应助: 0 (幼儿园)
- 贵宾: 3.348
- 金币: 7797.4
- 散金: 404
- 红花: 5
- 帖子: 2007
- 在线: 242小时
- 虫号: 649482
- 注册: 2008-11-08
- 性别: GG
- 专业: 物理
- 管辖: 程序语言
4楼2010-05-13 09:15:03
老虎大王
木虫 (著名写手)
- 应助: 26 (小学生)
- 贵宾: 0.17
- 金币: 4774.1
- 散金: 8
- 红花: 42
- 帖子: 1361
- 在线: 215.2小时
- 虫号: 659094
- 注册: 2008-11-21
- 专业: 金属结构材料
5楼2010-05-13 10:27:35












回复此楼
