為變數命名 - 匈牙利命名法(Hungarian notation)
更新日期:2020/3/18
更新日期:2020/3/18
為什麼需要命名規則?
在程式開發的過程中,我們常常要為許多的函數與變數取名,再依據選定的名稱來使用它們。如果能有一個可以遵循、便利的"命名規則",不僅可以讓程式碼更容易閱讀(自己閱讀或讓合作開發者閱讀),也能讓程式碼在日後的維護與管理更加便利。
什麼是"匈牙利命名法"?
發明人為祖籍在匈牙利的程式設計師Charles Simonyi,曾任職於全錄與微軟。"匈牙利命名法"的核心概念是將每個變數名稱"格式化"(意思就是依照一套規則去取名,而不是隨意選一個名稱),讓程式碼更容易閱讀。大多數的微軟程式碼都遵循匈牙利命名法。
"匈牙利命名法"的規則
一個變數由幾個定義其"類型"的字母為開頭(又稱為"前置詞"),在後面再加上一個以"大寫字母"起始的詳細名稱。常見的變數類型與命名時對應的開頭字母可以參考下面三個表格。
注意:前置詞維持數個字母,並在程式中**保持一致**。
命名範例與變數代表的意義
下面是幾個使用"匈牙利命名法”命名的變數的舉例,以及他們各自對應的意義:
* iPosX(指定X位置的整數)
* strPlayerName(玩家名稱的字串)
* ulHitPoints(生命值的無號長整數)
* hInstance(一個Handle指標)
* rectDrawingArea(繪圖區的矩形區域)
C++的額外規則
使用C++撰寫程式,通常還有下面三個額外的規則,在閱讀別人寫的程式碼時常會見到,自己在撰寫程式碼時也應該依循:
* 每個類別名稱以"C"開頭。
- CGameRules
- CPlayerCharacter
- CString
- CRect
- …
* 一個類別的成員使用一個附加的"m_"來作為前置詞。
- m_ulHitPoints
- m_cUserName
- m_lpScore
- …
* 全域變數通常會以"g_"標明。
- g_lpCmdLine
- g_strProgramTitle
- g_bIsInitialize
- …
使用"匈牙利命名法"的優點
如果在程式撰寫的過程中都遵循使用"匈牙利命名法",最直接的好處就是你不再會忘記變數類型!可以減少許多程式撰寫中可能發生的問題或錯誤。另外程式碼的可讀性也會增加,讓後續的編修比較容易進行。
使用"匈牙利命名法"的問題
* 如果你在寫下一些程式碼後,更改了變數類型,必須同時更改變數的名稱!
* 若忘記或忽略更改變數名稱,匈牙利標記法將可能誤導後續的編輯邏輯。
參考資料
* Mason McCuskey著,黃聖峰 譯,阿彬工作室 編製,『DirectX特效 遊戲程式設計』,博碩文化。
* 維基百科:https://zh.wikipedia.org/wiki/匈牙利命名法
歡迎社群分享。若要全文轉載,請先來信詢問。禁止修改內文,禁止商業使用,必須註明來自「太陽部落」及附上原文連結:https://sunblogsws.blogspot.com/2020/03/hungarian-notation.html
留言