驼峰命名法(Camel Case)与匈牙利命名法(Hungarian Notation)详解及对比
**1. 驼峰命名法(Camel Case)**
定义
驼峰命名法(Camel Case)是一种变量、函数、类等标识符的命名方式,单词之间无分隔符,每个单词的首字母大写(或首单词小写),形似驼峰。
分类
类型 | 规则 | 适用场景 | 示例 |
---|---|---|---|
**小驼峰(lowerCamelCase)** | 首单词小写,后续单词首字母大写 | 变量、函数、方法名 | userName , getUserInfo() |
**大驼峰(UpperCamelCase / Pascal Case)** | 所有单词首字母大写 | 类名、接口名、类型名 | UserModel , StringUtils |
特点
✅ 可读性强 :单词间无分隔符,但首字母大写仍能清晰区分。
✅ 现代编程语言主流 :Java、JavaScript、C#、Go 等广泛使用。
❌ 不适用于常量 :常量通常用全大写+下划线(如 MAX_SIZE
)。
示例
java
// 变量(小驼峰)
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# 等已有严格类型系统,前缀显得多余。
示例
cpp
// 系统匈牙利命名法(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
)。 - 团队统一规范比个人习惯更重要。
**现代代码示例(驼峰命名法)**
java
// 类名(大驼峰)
class UserService {
// 方法名(小驼峰)
public void updateUserProfile(String userId) {
// 变量名(小驼峰)
int retryCount = 0;
boolean isSuccess = false;
}
}
**遗留代码示例(匈牙利命名法)**
cpp
// Win32 API 风格(系统匈牙利)
HWND hWnd = CreateWindow(...); // h = handle, Wnd = window
DWORD dwErrorCode = GetLastError(); // dw = double word (32-bit)
总结
- 驼峰命名法:现代主流,清晰简洁,适用于大多数语言。
- 匈牙利命名法:历史遗留,冗余但类型明确,适用于低级编程(如 C/C++)。
- 选择依据 :语言规范 > 团队约定 > 个人习惯。