驼峰命名法(Camel Case)与匈牙利命名法(Hungarian Notation)详解

驼峰命名法(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. 现代编程建议‌

  1. ‌优先使用驼峰命名法‌(尤其是 Java/JS/C#)。
  2. ‌避免匈牙利命名法‌,除非维护遗留代码(如 Win32 API)。
  3. ‌常量命名 ‌推荐全大写+下划线(如 MAX_LENGTH)。
  4. ‌团队统一规范‌比个人习惯更重要。
‌**现代代码示例(驼峰命名法)**‌
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++)。
  • ‌选择依据 ‌:‌语言规范 > 团队约定 > 个人习惯‌。
相关推荐
布莱克6053 小时前
C/C++ 中变量的声明与定义:区别、联系与常见误区
c语言·开发语言·c++·声明·定义
沫璃染墨8 小时前
从零入门计算机网络系列(十二):HTTP长连接与会话管理详解——从Connection到Cookie与Session
linux·服务器·c++·tcp/ip·ubuntu·http·交互
xiaoye-duck9 小时前
《C++ 项目:手写大模型接入 SDK》DeepSeek接口设计(下):流式响应实现和测试
开发语言·网络·c++·语言模型
旖旎夜光10 小时前
【C++ 基础入门】类和对象(上):封装、对象模型与 this 指针
开发语言·c++·笔记·学习
小超人诞生日记11 小时前
C++ 智能指针的使用及其原理详解
c++·算法
akinggw12 小时前
libagentcore - 一个基于c++的AI多agent系统升级到2.0版本
开发语言·jvm·c++
繁星蓝雨12 小时前
C++设计原理———多重继承(虚基类、菱形继承、委托、重命名、基类和成员初始化)
c++·委托·多重继承·mi·显式初始化列·虚基类·对象布局
旖旎夜光13 小时前
【C++ 基础入门】命名空间、输入输出、缺省参数与函数重载
开发语言·c++·笔记·学习
扶尔魔ocy14 小时前
【QT入门到晋级】用开源的自定义控件开发
c++·qt·自定义控件
akinggw15 小时前
libsherpacore - 基于 sherpa-onnx 的 C++ 语音交互静态库
c++·交互·语音识别