不規範變數名的痛處和一點補救

zhoupq發表於2017-11-01

原文連結:zhoupq.com

  變數與函式的命名對於大多數開發人員來說,絕對可謂一個痛處。不規範的命名往往是詞不達意,經常會被攪得一頭霧水,不僅影響開發效率,還拖慢了整個專案進度。

  就我接觸的老專案來說,不規範的命名比比皆是。現在出現這麼一種情況,一個事物對應多種變數名。“開始日期”就有三種表現形式——sDatestartDatefbrqBegin,並且在同一套業務、甚至在同一個方法中混搭使用。我最後選擇了 startDate 作為新業務邏輯的變數名,startDate 也是我新增的。

 // 老方法,接收引數名: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)
{
    const startDate = $("input[name='sdate']").val(); // 開始日期
    const endStart = $("input[name='edate']").val();
    const url="${path}/web/xxx"+numm+".tag?sdate="+startDate+"&edate="+endStart;
    ……
};複製程式碼

  不只是 “開始日期”,還有“廠商”(csmcvendor)、“產品”等都擁有多種變數名。

  若覺得有問題,要麼重構,要麼延續。先說說重構,此處的重構更確切說應該是改善程式碼可讀性,重構是一種理想行為,因為它往往需要大量時間,改善程式碼可讀性的同時,還需要不斷地除錯,以確保不會因為重構而引起其他模組出現bug。必須提的是,重構不列入工作績效,在專案制軟體行業,不存在重構的說法,只有能不能用。所以,你需要利用業餘時間去做這些事,做得好,也許會被口頭獎勵,沒做好,出現了意外的bug,並且沒有及時修復,下個季度的績效估計就不好看了。

  當然,不管最終結果如何,重構一定會提升我們的技術水平,對自己的技術發展來看,是穩賺不賠的生意。可是你有時間去重構嗎?你真的願意冒著吃力不討好,甚至降績效的風險?難道不能寫開源軟體來提升技術嗎?這是一個自己內心的博弈。我接觸了好幾個專案,越做到後期,對老程式碼的吐槽就越少,因為我越來越理解當時的開發人員遇到的尷尬境地,最後他們也許選擇了延續,或者小範圍的重構。以上只針對傳統軟體行業專案制而言。網際網路公司的產品,那就必須反覆打磨,精益求精!

  最後,我也選擇了在業餘時間進行可控範圍內的重構,畢竟專案交付時間不會因為重構而延期。即使得不到物質好處,但我為了提升點技術,以及看不慣混亂的場面,當手上的程式碼存在引起bug的風險,我就要及時彌補。將新業務模組的引數統一規範化:

 // 新方法,接收引數名:startDate
function fun2(numm)
{
    const startDate = $("input[name='sdate']").val(); // 開始日期
    const endStart = $("input[name='edate']").val();

    // 將接收引數名改為:startDate
    const url="${path}/web/xxx"+numm+".tag?startDate="+startDate+"&endStart="+endStart;
    ……
};

 // fun2(numm) 對應的 servlet
 String startDate = request.getParameter("startDate");複製程式碼

  不能重蹈蔡桓公的覆轍:

  居十日,扁鵲望桓侯而還走。桓侯故使人問之,扁鵲曰:“疾在腠理,湯熨之所及也;在肌膚,針石之所及也;在腸胃,火齊之所及也;在骨髓,司命之所屬,無奈何也。今在骨髓,臣是以無請也。”
  居五日,桓侯體痛,使人索扁鵲,已逃秦矣,桓侯遂死。

  ——摘自《扁鵲見蔡桓公》複製程式碼

  我的變數名除了專有名詞之外,不使用拼音,並且很少用不通用不常見的縮寫,基本是常見的單詞縮寫或者全拼。這裡說一個印象比較深刻的單詞——Count

Count
-----------------------------
英文簡稱 : CT
中文全稱 : 計數
所屬分類 : 醫藥衛生複製程式碼

  而 CT海詞縮略語)也很有可能是其他單詞的縮寫:

其他解釋
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海詞縮略語):

CNT的常用相關縮略詞條,共有 1 條。
------------------------------------------------------------------------
CNT : Count
中文全稱:記數,記數器
詞條簡介:記數,記數器

CNT的其他相關縮略詞條,共有 19 條。
------------------------------------------------------------------------
CNT:Country   n. 國家
CNT:Carbon Nano Tube   碳奈米管
CNT:Celestial Navigation Trainer   天體導航訓練裝置
……複製程式碼

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

CNT的英文全稱是Carbon Nanotube。中文名稱是碳奈米管,與金剛石、石墨、富勒烯一樣,是碳的一種同素異形體。複製程式碼

  CTCNT 都容易造成歧義,直接用 Count。在我看過的文件中,多數大公司也推薦如此。

版權宣告:轉載請註明出處 zhoupq.com

相關文章