駝峰命名法(Camel Case)與匈牙利命名法(Hungarian Notation)詳解及對比?
?1. 駝峰命名法(Camel Case)?
?定義?
駝峰命名法(Camel Case)是一種變量、函數、類等標識符的命名方式,單詞之間?無分隔符?,每個單詞的首字母大寫(或首單詞小寫),形似駝峰。
?分類?
類型 | 規則 | 適用場景 | 示例 |
---|---|---|---|
?小駝峰(lowerCamelCase)? | 首單詞小寫,后續單詞首字母大寫 | 變量、函數、方法名 | userName , getUserInfo() |
?大駝峰(UpperCamelCase / Pascal Case)? | 所有單詞首字母大寫 | 類名、接口名、類型名 | UserModel , StringUtils |
?特點?
? ?可讀性強?:單詞間無分隔符,但首字母大寫仍能清晰區分。
? ?現代編程語言主流?:Java、JavaScript、C#、Go 等廣泛使用。
? ?不適用于常量?:常量通常用全大寫+下劃線(如 MAX_SIZE
)。
?示例?
// 變量(小駝峰)
String userName = "Alice";
int maxRetryCount = 3;// 方法(小駝峰)
public void calculateTotalPrice() { ... }// 類名(大駝峰)
class UserController { ... }
?2. 匈牙利命名法(Hungarian Notation)?
?定義?
匈牙利命名法(Hungarian Notation)是一種?前綴命名法?,在變量名前添加?類型或用途縮寫?,幫助開發者快速識別變量類型或作用。
?分類?
類型 | 規則 | 適用場景 | 示例 |
---|---|---|---|
?系統匈牙利命名法? | 前綴表示變量類型 | 早期 Windows API、C/C++ | nCount (int 類型), pBuffer (指針) |
?應用匈牙利命名法? | 前綴表示變量用途 | 現代代碼(較少使用) | strUsername (字符串用戶名), bIsReady (布爾值) |
?特點?
? ?類型/用途清晰?:通過前綴快速識別變量類型或作用。
? ?冗余、易過時?:現代 IDE 可自動提示類型,前綴可能造成代碼臃腫。
? ?不適用于強類型語言?:如 Java、C# 等已有嚴格類型系統,前綴顯得多余。
?示例?
// 系統匈牙利命名法(C/C++)
int nAge = 25; // n = number (int)
char* pszName = "Bob"; // p = pointer, sz = string (zero-terminated)
BOOL bIsActive = TRUE; // b = boolean// 應用匈牙利命名法(現代較少用)
String strUserName = "Alice"; // str = string
boolean bIsLoggedIn = false; // b = boolean
?3. 兩種命名法的對比?
特性 | 駝峰命名法 | 匈牙利命名法 |
---|---|---|
?核心思想? | 單詞首字母大寫,無分隔符 | 前綴表示類型/用途 |
?適用語言? | Java、JavaScript、C#、Go | 早期 C/C++、Win32 API |
?可讀性? | 高(依賴大小寫區分) | 中(依賴前綴記憶) |
?冗余度? | 低 | 高(前綴可能過時) |
?現代使用? | 主流 | 逐漸淘汰 |
?4. 現代編程建議?
- ?優先使用駝峰命名法?(尤其是 Java/JS/C#)。
- ?避免匈牙利命名法?,除非維護遺留代碼(如 Win32 API)。
- ?常量命名?推薦全大寫+下劃線(如
MAX_LENGTH
)。 - ?團隊統一規范?比個人習慣更重要。
?現代代碼示例(駝峰命名法)?
// 類名(大駝峰)
class UserService {// 方法名(小駝峰)public void updateUserProfile(String userId) {// 變量名(小駝峰)int retryCount = 0;boolean isSuccess = false;}
}
?遺留代碼示例(匈牙利命名法)?
// Win32 API 風格(系統匈牙利)
HWND hWnd = CreateWindow(...); // h = handle, Wnd = window
DWORD dwErrorCode = GetLastError(); // dw = double word (32-bit)
?總結?
- ?駝峰命名法?:現代主流,清晰簡潔,適用于大多數語言。
- ?匈牙利命名法?:歷史遺留,冗余但類型明確,適用于低級編程(如 C/C++)。
- ?選擇依據?:?語言規范 > 團隊約定 > 個人習慣?。