绝对不要使用的变量名模式

我曾对出版的《代码大全(Code Complete)(第二版)》做了校对,他的作者是Steve McConnell。书里面用了一整章来写如何给变量命名。但也只是蜻蜓点水并没有深入,在这个问题上我想探讨一下自己的意见。比较烂的变量名处处可见,人人都想把变量名写的很短,不过他的生存空间又很大,大家可能会知道,在TRS-80BASIC语言里,变量名前两位字符是有意义的,所以很多人会在程序里使用$n这样的变量,使我们编程的时候还要把手抄本的变量名表常常拿来参考。

NetSmell 出品

我曾对出版的《代码大全(Code Complete)(第二版)》做了校对,他的作者是Steve McConnell。书里面用了一整章来写如何给变量命名。但也只是蜻蜓点水并没有深入,在这个问题上我想探讨一下自己的意见。

比较烂的变量名处处可见,人人都想把变量名写的很短,不过他的生存空间又很大,大家可能会知道,在TRS-80BASIC语言里,变量名前两位字符是有意义的,所以很多人会在程序里使用$n这样的变量,使我们编程的时候还要把手抄本的变量名表常常拿来参考。

很多时候大家总想把变量简化,比如把$cust的变量名变成$cstmr。人们能否分清这个变量是代表 customers ,还是表示 costumers!

有些很怪的变量名看起来只是有趣但没什么用。我见过有人在循环语句里被命名为 $crap(屎) 的变量。也有把一个函数命名为 THE_LONE_RANGER_RIDES_AGAIN()
(“徘徊者”号航天器又能起飞了)。不过这些看起来都不是最糟糕的变量名。见过最糟糕的变量名 是:

   $data

这个变量名看起来的确是个数据,就像你用一个箱子打包你暂时不用的东西一样,装好后你会在外面写上物品。

如果说这个变量是个函数指针,那么它里面的数据也是告诉程序何处去运行这个函数。 即使这个变量是 undef 或 NULL, 包含这种值的变量本身就具有特殊意义。

变量名里装载了什么数据。只有自己知道是什么,。曾看到有人用 $data 表示从数据表里读取的一条记录。写法就像这样:

    $data = read_record();
    print "ID = ", $data["CUSTOMER_ID"];

如果自己清楚是什么数据,将来思路也会更清晰些。 命名成 $record 就好多了。 $customer_record 那就更好了。

如果我说出另一个比较糟糕的变量名应该不会有人反对吧 :

   $data2

如果任何一个变量依赖于序列号来区别跟它相似的数据时,你需要立即重新考虑这个变量命名。 你经常会看到像这样的代码:

    $total = $price * $qty;
    $total2 = $total - $discount;
    $total2 += $total * $taxrate;
    $total3 = $purchase_order_value + $available_credit;
    if ( $total2 < $total3 ) {
        print "You can't afford this order.";
    }

如果这段代码只是指明了订单的总额, $total。那么没有其它的,这个 $total 定义的无可挑剔。可有人在此之后加了一段代码,用来处理折扣和税率,将它们存到 $total2里。 最后,有人又加了一段,用来检查用户支付的总值,并把变量命名为 $total3。

这段代码里最关键的能反映问题的一句是:

if ( $total2 < $total3 )

如果你愿意花上一点时间把他们做到最简单,成本最低最安全,特别是变量在一个封闭的子程序里时,更需要这样。

让我们对上面这段糟糕的代码做一个简单的查找替换过程:

    $order_total = $price * $qty;
    $payable_total = $order_total - $discount;
    $payable_total += $payable_total * $taxrate;
    $available_funds = $purchase_order_value + $availble_credit;
    if ( $payable_total < $available_funds ) {
        print "You can't afford this order.";
    }

这段代码看见来就很容易理解了。 现在所有的 _total 变量都不存在歧义了。

[credit type=’翻译’ url=’http://archive.oreilly.com/pub/post/the_worlds_two_worst_variable.html’]

显示余下内容
 

发表评论

电子邮件地址不会被公开。 必填项已用*标注