C++ 程式設計
C++ 關於識別符號 和 其關鍵字 的命名限制已經在 程式碼部分 中介紹過。這些限制給命名留下了很多自由度,可以使用特定的字首或字尾,名稱以大寫或小寫字母開頭,將所有字母保持在單一大小寫,或者對於複合詞,使用像 "_" 這樣的詞分隔符或翻轉每個元件詞的首字母的大小寫。
匈牙利命名法,現在也稱為 Apps 匈牙利命名法,是由查爾斯·西蒙尼 (Charles Simonyi) 發明的 (一位在 1972-1981 年間在 Xerox PARC 工作的程式設計師,後來成為微軟首席架構師);並且直到最近,它一直是大多數微軟程式碼中使用的首要命名約定。它使用字首 (比如 "m_" 表示成員變數,"p" 表示指標),而識別符號的其餘部分通常使用某種混合大小寫的方式寫出來。我們提到這個約定,是因為你很可能會發現它正在使用中,如果你在 Windows 中進行任何程式設計,這更可能發生,如果你有興趣瞭解更多,可以檢視 維基百科關於這種命名的條目。
這種命名法被認為已經過時,因為它很容易出錯,並且需要一些努力才能在沒有實際好處的情況下維護,而且在當今的 IDE 中也是如此。如今,重構是一項日常任務,IDE 已經發展到可以提供識別符號彈出視窗和顏色方案使用的幫助。所有這些資訊輔助減少了對這種命名的需求。
在大多數情況下,最好避免使用前導下劃線。它們是為編譯器或庫的內部變數保留的,並且會使你的程式碼難以移植和維護。這些變數也可以從庫中剝離 (即變數不再可訪問,它對外部世界隱藏),因此除非你想要覆蓋庫的內部變數,否則不要這樣做。
不要使用標準庫函式和物件的名稱作為你的識別符號,因為這些名稱被認為是保留詞,程式在意外使用時可能會變得難以理解。
始終使用良好、未縮寫、拼寫正確、有意義的名稱。
優先使用英語 (因為 C++ 和大多數庫已經使用英語),並避免使用簡短的隱晦名稱。這將使程式碼更容易閱讀和輸入名稱,而無需查詢。
識別符號應該表明它所代表的變數/函式/等的函式,例如,foobar 可能不是儲存人的年齡的變數的良好名稱。
識別符號名稱也應該是描述性的。n 可能不是表示員工數量的全域性變數的良好名稱。但是,必須找到長名稱和大量鍵入之間的良好折衷方案。因此,對於在 小範圍或上下文中使用 的變數,可以放寬此規則。許多程式設計師更喜歡使用短變數 (如 i) 作為迴圈迭代器。
按照慣例,變數名稱以小寫字母開頭。在包含多個自然語言詞的識別符號中,使用下劃線或大小寫來分隔這些詞,例如 num_chars (K&R 風格) 或 numChars (Java 風格)。建議你選擇一種符號並不要在一個專案中混合使用。
在命名 #defines、常量變數、enum 常量和宏時,使用全大寫並用 "_" 分隔符;這使得很清楚地表明該值不可更改,並且在宏的情況下,明確地表明你正在使用需要小心處理的構造。
賦予函式和成員函式的名稱應該具有描述性,並清楚地表明它所執行的操作。由於函式和成員函式通常執行操作,因此最佳名稱選擇通常包含動詞和名詞的組合,例如 CheckForErrors() 而不是 ErrorCheck(),以及 dump_data_to_file() 而不是 data_file()。函式和成員函式的清晰、描述性的名稱有時可以使正確猜測函式和成員函式的功能變得更容易,從而有助於使程式碼更加自記錄。透過遵循此命名約定和其他命名約定,程式可以更自然地閱讀。
人們在使用包含縮寫詞的名稱時,似乎有不同的直覺。最好確定一種策略,以便名稱是完全可預測的。以 NetworkABCKey 為例。注意 ABC 中的 C 和 key 中的 K 是如何混淆的。有些人並不介意,而另一些人則非常討厭,因此你會在不同的程式碼中發現不同的策略,所以你永遠不知道如何命名某個東西。
字首和字尾有時很有用
- Min - 表示某事物可以擁有的最小值。
- Max - 表示某事物可以擁有的最大值。
- Cnt - 某事物的當前計數。
- Count - 某事物的當前計數。
- Num - 某事物的當前數量。
- Key - 鍵值。
- Hash - 雜湊值。
- Size - 某事物的當前大小。
- Len - 某事物的當前長度。
- Pos - 某事物的當前位置。
- Limit - 某事物的當前限制。
- Is - 查詢某事物是否為真。
- Not - 查詢某事物是否不為真。
- Has - 查詢某事物是否具有特定的值、屬性或特性。
- Can - 用於詢問某件事是否可以做到。
- Get - 獲取一個值。
- Set - 設定一個值。
在大多數情況下,最好避免在識別符號開頭使用下劃線。例如,以下識別符號是有效的
i迴圈變數numberOfCharacters字元數量number_of_chars字元數量num_chars字元數量get_number_of_characters()獲取字元數量get_number_of_chars()獲取字元數量is_character_limit()是否達到字元限制?is_char_limit()是否達到字元限制?character_max()字元最大數量charMax()字元最大數量CharMin()字元最小數量
以下也是有效的識別符號,但你能說出它們的含義嗎?
num1do_this()g()hxq
以下識別符號雖然有效,但最好避免使用
_num因為它們可能被編譯器/系統標頭檔案使用num__chars因為它們可能被編譯器/系統標頭檔案使用main因為可能會引起混淆cout因為可能會引起混淆
以下不是有效的識別符號
if因為它是關鍵字4nums因為以數字開頭number of characters因為識別符號中不允許空格