国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

史上最糟糕的兩個變量名

發(fā)布時間:2012-5-15 22:02    發(fā)布者:Liming
關鍵詞: 變量名
作為一個程序員,“起名字”是他們工作中非常重要的一部分。Phil Karlton就說過:“在計算機科學領域,有兩大難題,如何驗證緩存和如何給各種東西命名。”雖然很難,但是每次在寫代碼的時候,給事物起名字又是不可回避的工作。無論是程序變量名還是數(shù)據(jù)庫表名或者是表里的列名,甚至是文件系統(tǒng)中的文件名,以及你的項目名稱、產(chǎn)品名稱,給這些東西起名字可不是個輕松活兒。
糟糕的命名方式隨處可見。你會發(fā)現(xiàn),有的變量名字起得太短,根本沒法提供足夠的描述信息。或許有這個問題的人都做過 TRS-80 BASIC程序員,在這種BASIC語言里,無論你起多長的變量名,只有名字的頭兩個字母有效,所以那個時候的程序員不得不在鍵盤邊兒上放個筆記本,以便將很短的變量名稱和他們的對應含義記錄下來,這樣才能不搞混淆。
有的時候,你會發(fā)現(xiàn)這樣的命名方法:直接將變量名稱中的原音字母省略,以此來縮短變量的長度。這種方法被用來替代常用的 “截斷法”,也就是簡單地把字母截斷來縮短長度。比如你可以用$cstmr(原音省略)來代替$cust(直接截斷). 但是,對于customers(顧客)和costumers(服裝提供商)這兩個單詞來說,原音省略法就會造成混淆(customers和 costumers采用原音省略法,其結(jié)果都是cstmr)。更糟糕的是,$cstmr缺乏原音字母,打字的時候會更加別扭,而且從讀音的角度來說,也很難對其進行發(fā)音。
TSR80計算機,只支持4位的變量名

還有一種人為的特殊命名方式,有的時候程序的作者只是為了小幽一默,所以起了些有趣的名字。我就曾經(jīng)見到過有人把循環(huán)變量命名為$crap (crap在英語里是輕微的咒罵,跟damm,shit這種詞語差不多——譯者注),我的一個同事告訴我,他在給一段代碼做整理的時候,看到過有個函數(shù)被命名為:THE_LONE_RANGER_RIDES_AGAIN()。雖然這樣的命名方式非常特殊,但是他們并不屬于我說的“糟糕”的命名的范疇。
雖然我很清楚,對于命名規(guī)范這種事情,大家是公說公有理,婆說婆有理,但是,我還是非常自信地宣布,我認為,史上最糟糕的命名是:$data!
是的!必須是$data! 這個命名完全是循環(huán)定義,實際上就是一句廢話。就仿佛你把你們家所有的東西都扔到一個行李箱里,然后在行李箱上面貼個條,赫然寫著:“東西”
正確變量命名應該寫清楚變量的數(shù)據(jù)類型。因此在命名是考慮數(shù)據(jù)類型是一個很好的提升命名質(zhì)量的辦法。我有一次在看一段讀數(shù)據(jù)庫表記錄的代碼時,看到了$data這個名字,大概像下面這樣:
1
2
3
$data = read_record();

print "ID = ", $data["CUSTOMER_ID"];



如果這時候問問:“$data是什么數(shù)據(jù)類型呢?”,然后你就很想給它換個名字了。把名字改成$record是一個好的開始。進一步改成$custormer_record,就更好一些了。
模糊的命名相當糟糕,糟糕程度緊隨其后的就是,長得幾乎一樣,無法分辨的變量名。因此,有史以來第二糟糕的變量名就是: $data2.
總的來說,任何僅僅依靠數(shù)字編號來區(qū)分的變量名都應該被重構(gòu)。馬上舉個例子給你看,你就明白了:
1
2
3
4
5
6
7
8
9
10
11
12
13
$total = $price * $qty;

$total2 = $total - $discount;

$total2 += $total2 * $taxrate;

$total3 = $purchase_order_value + $available_credit;

if ( $total2 < $total3 ) {

    print "You can't afford this order.";

}




你可以發(fā)現(xiàn),要讀懂這個代碼就跟讀甲骨文一樣痛苦。很明顯,這個程序的目的就是要計算訂單的總花費,$total. 如果程序的邏輯沒有問題,那么$total這個變量名也算是恰如其分。但是,偏偏有人修改了這個程序,給添加了計算折扣和稅率的功能,然后他還在變量命名上偷懶,直接起了個$total2, 更可恨的是,還有其他人在這個程序里計算了用戶的可用賬戶金額,然后直接起名叫$total3!
真正倒霉催的是下面這行代碼:
1
if ( $total2 < $total3 )



如果你不回頭看之前的代碼,要想知道這句代碼的意義是完全不可能的。所以你必須往回閱讀,看看哪個變量究竟是什么意思。
如果你看到了類似像$total2這樣的變量,那就應該把這個名字改得更加具體一些。花5分鐘的時間讓這些變量名稱變得更加合理。這個層面上的軟件重構(gòu)是最簡單,代價最小,也是最安全的,尤其是在你要修改的變量是個局部變量的時候。
讓我們用最簡單的“搜索-替換”功能來解決我們之前發(fā)現(xiàn)的問題
1
2
3
4
5
6
7
8
9
10
11
12
13
$order_total = $price * $qty;

$payable_total = $order_total - $discount;

$payable_total += $payable_total * $taxrate;

$available_funds = $purchase_order_value + $available_credit;

if ( $payable_total < $available_funds ) {

    print "You can't afford this order.";

}



經(jīng)過修改后,唯一變化的就是變量名,而且代碼變得簡單易懂了。現(xiàn)在對于每個_total,就不存在二義性的問題了。看看我們發(fā)現(xiàn)了什么:原先if語句中的兩個比較變量的位置寫反了。有效的命名方法讓我們能夠更快地發(fā)現(xiàn)錯誤。
通常,我們都認為用數(shù)字作為變量的結(jié)尾是不好的命名方法,但是有一個例外。如果變量描述的實體本身就是以數(shù)字結(jié)尾的,那變量名最好也是以數(shù)字結(jié)尾。比如,如果我們要定義一個SHA-1哈希實體,那干脆就把它命名為$sha1,這樣就很好,你完全沒有必要把它搞成$sha_one,然后來避免在變量名中使用數(shù)字。
在我完成了對本文的第一版后,我創(chuàng)立了自己的命名規(guī)則,并使用Perl::Critic包來檢測上述提到的兩種命名問題。我制作的插件 Perl::Critic::Bangs 可以檢測出這兩種問題:ProhibitVagueNames 和 ProhibitNumberNames.
還有哪些其他的糟糕的命名方法逼得你發(fā)瘋?你自己有去做些什么糾正這些錯誤么?
英文原文:The world’s two worst variable names  
編譯:伯樂在線 – 黃小非
本文地址:http://m.qingdxww.cn/thread-91588-1-1.html     【打印本頁】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點和對其真實性負責;文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時間更正或刪除。
elm99 發(fā)表于 2012-5-20 13:55:53
學習了,同感
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區(qū)
  • 使用SAM-IoT Wx v2開發(fā)板演示AWS IoT Core應用程序
  • 使用Harmony3加速TCP/IP應用的開發(fā)培訓教程
  • 集成高級模擬外設的PIC18F-Q71家族介紹培訓教程
  • 探索PIC16F13145 MCU系列——快速概覽
  • 貿(mào)澤電子(Mouser)專區(qū)
關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 四虎精品福利视频精品| 国产精品99久久久久久人韩国 | 在线免费欧美| 在线观看视频免费播放| 又粗又长又黄又爽视频| 精品国产人成亚洲区| 亚州日韩精品AV片无码中文| 中文字幕 人妻熟女| 日日操狠狠操| 日本三级香港三级人妇99| 天天综合色网| 亚飞与亚基国语1080p在线观看| 亚洲人影院| 国产免费阿v精品视频网址| 秋霞伦理机在线看片| 欧美日本一本线在线观看| 日本aⅴ在线不卡免费观看| 午夜天堂| 图片专区亚洲色图| 在线视频一区二区三区福利精品| 国产成人拍精品免费视频爱情岛| 日本特黄网站| 亚洲精品大片| 天天色综合2| 亚洲色图欧美偷拍| 花蝴蝶在线直播观看| 涩涩爱涩涩片影院| 青草草在线观看免费视频| 日本欧美一区二区三区视频麻豆 | 夜夜躁婷婷AV蜜桃视频| 青草久草视频| 视频免费| 摘花过程处乌克兰| 欧美の无码国产の无码影院| 一区二一二| 欧美一区二区三区在观看| 中文字幕视频免费在线观看| 99视频久久精品久久| 伦理79电影网在线观看| 一本色道久久综合亚洲精品| 欧美亚洲国产精品久久|