對程式語言中變數命名方法的探討和常用規範
風格優美的程式,讀起來就像讀一篇流暢的文章。清晰易懂又給人以美感。
看著教材和例程中糟糕的編碼風格,再看著同學發來的,模仿那些的拙劣的編碼。我決定寫出這篇文章,談一談我對程式設計規範的拙見。
1.關於變數命名
這個問題是本文準備討論的重點。先來總結一下變數命名的幾大常用方法。
1)匈牙利命名法
匈牙利命名法的特點是字首。用字首標明變數的型別。字首後面的單詞首字母大寫,其他字母小寫。讓人一看到變數名就能知道這個變數的型別。對於類中的成員,在最前面附加使用“m_”字首,意為member。全域性變數新增“g_”字首,意為global。匈牙利命名法出現時間較早。當時的編譯器對型別檢查的能力還比較弱。在現代的編譯器中,編譯器可以發現型別錯誤並給出詳盡而準確的提示資訊。而且匈牙利命名法書寫複雜,因此逐漸退出了歷史舞臺。現在程式設計師使用匈牙利命名法的已經很少了。就連微軟自己了
但在日常程式設計中,恰當的使用匈牙利命名法也可以帶來方便。例如為控制元件的名稱使用匈牙利命名法,就可以提高程式碼的可讀性。例如儲存按鈕的名字btnSave,密碼輸入框的名字txtPassword,圖片框imgLogo等等。
匈牙利命名法常用的字首有:
int 整形如intAge
lng長整型 如lngPhoneNum
bln 布林型 如blnEmpty
chr 字元型 如chrChoice
str 字串型 如strName
這些字首還可以再簡化,形成下面的樣子(摘自維基百科):
lAccountNum : 變數是一個長整型 ("l");
arru8NumberList : 變數是一個無符號8位整型陣列 ("arru8");
szName : 變數是一個零結束字串 ("sz")
hwndFoo : 視窗控制代碼
lpszBar : 指向零結束字串的長指標
2)Camel命名法
Camel也叫駝峰命名法。顧名思義,就是開頭單詞小寫,後面單詞首字母大寫。這樣兩邊低中間高,看起來像駝峰,因此得名。如果識別符號只有一個單詞,就全部使用小寫。Camel命名法不新增表示型別的字首。在Java的官方標準中,Camel命名法被作為主要命名法。Java的所有庫函式均採用
Camel命名法的舉例:
getName 返回姓名的函式
setAge 設定年齡的函式
3)Pascal命名法
Pascal命名法也是一種受歡迎的命名法。.Net全部類庫的函式名均採用Pascal命名法。Pascal命名法與Camel命名法類似,區別在於其首字母大寫。例如GetDate,Name等等。
2.變數命名的常見問題
命名法主要側重的還是大小寫的規範。其實更重要的是識別符號本身。使用有意義的名字作為識別符號,這是地球人都知道的真理。但是有意義是什麼意義?怎樣才算有意義?
其實可以總結為一句話,使用英文或常用的英文縮寫,不要使用漢語拼音。絕對不要使用漢語拼音的縮寫。拼音縮寫比用a,b,c來命名還要糟糕。
上次學校培訓資料結構,師兄開啟他的程式碼,有一個函式名是lztz()。我賭你一週內不可能猜出它的含義。你可以先猜一猜。不猜了?好吧我告訴你。這個是“鏈棧退棧”拼音的縮寫。這種函式名是在是令人作嘔!
一些英文的縮寫是可以使用的,下面列出一些常用的英文縮寫:
Send 可縮寫為 Snd;
Receive 可縮寫為 Rcv
temp 可縮寫為 Tmp;
flag 可縮寫為 Flg;
statistic 可縮寫為 Stat;
status 可縮寫為 Sta;
message 可縮寫為 Msg;
下面就來說說幾個常見的問題
Flag,這是很多人都喜歡用的變數名。甚至還出現了flag1,flag2,flag3……不禁讓我想起了賈君鵬你媽喊你回家吃飯,還有賈君鵬他爸,賈君鵬他姑媽……
這種flag雖然是英文,有意義。但並不能表達一個明確的含義。與其使用flag,不如使用isEmpty,canExit,hasNext等更明確的寫法。例如這三個變數名就明確的表示(棧)空,可以退出,(輸入流中)有下一個資料。相信我,is,can,has這三個字首是全世界程式設計師都在使用的字首,是純正的英語。不是我編出來的Chinglish。
說到中國式英語,我不禁想到一個有趣的事情,那就是“性別”的英語。應該用Gender,而不是很多人,甚至很多教材上使用的Sex。
GetInfo,這個貌似是個不錯的變數名。可以猜到是獲取資訊之意。但是仔細想想,這是廢話,只要有返回值,就肯定是獲取資訊。其實一個get就夠了。這樣的變數可以寫的再詳細一點。比如獲取身份資訊,就是GetID.獲取檔案資訊就是GetFileInfo等等。這樣要比一個單獨的Info有意義很多。類似的還有GetData設定資料,也可以用類似的方法改進。
3.關於縮排
縮排可以讓程式結構清晰。對增強程式可讀性有重要的意義。使用縮排時,推薦使用4個空格來縮排,縮排不要太小,至少要2個空格。使用Tab縮排很方便,但在不同編輯器裡,Tab佔的寬度也是不一樣的。最恐怖的是空格和Tab混用。在Tab佔4個字元的編輯器裡一切正常,一旦到Tab佔8字元的編輯器裡,縮排風格就會改變。縮排相當於沒有。大部分編輯器裡都可以設定自動將Tab替換成4個空格,大家可以自己找找這個選項。
縮排也有不同的風格,常見的有以下幾種。
1)K&R風格
void using_k_and_r_style(){
// K&R風格
}
這種風格被Java推薦採用。我個人不是很喜歡。就算寫Java,我也會括號獨佔一行
2)括號獨佔一行
void putting_each_brace_on_its_own_line()
{
// 括號獨佔一行
}
這個風格我比較喜歡,微軟也採用這種風格的縮排。使用CodeBlocks的Astyle外掛以及在VC中使用Alt+F8(VC6)或者Ctrl+K,Ctrl+F(VS2005之後版本)快捷鍵自動整理程式碼格式,都會採用括號獨佔一行的風格。這也是C++推薦的縮排風格。
3)括號獨佔一行並縮排
奇怪的縮排方法,早期被廣泛使用,現在我沒見過有人用。前段時間看了一本“豪傑超級解霸”作者寫的書,裡面推薦了這種風格。我個人不喜歡這個縮排。
void or_putting_each_brace_on_its_own_line_indented()
{
// 括號獨佔一行並縮排
}
心血來潮,寫了這篇文章。草草收筆,不完善的地方就以後慢慢補充吧。歡迎大家不吝賜教。最後祝大家都能寫出漂亮高效的程式碼。我們共同努力!
原文連結:http://kqwd.blog.163.com/blog/static/412234482010219111453915/