当前位置: 首页 > ai >正文

驼峰命名法(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)。

示例
// 变量(小驼峰)
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. 现代编程建议

  1. 优先使用驼峰命名法‌(尤其是 Java/JS/C#)。
  2. 避免匈牙利命名法‌,除非维护遗留代码(如 Win32 API)。
  3. 常量命名‌推荐全大写+下划线(如 MAX_LENGTH)。
  4. 团队统一规范‌比个人习惯更重要。
现代代码示例(驼峰命名法)
// 类名(大驼峰)
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++)。
  • 选择依据‌:‌语言规范 > 团队约定 > 个人习惯‌。
http://www.xdnf.cn/news/2378.html

相关文章:

  • Web开发-JavaEE应用依赖项Log4j日志Shiro验证FastJson数据XStream格式
  • 3、Linux操作系统下,linux的技术手册使用(man)
  • flask返回文件的同时返回其他参数
  • 微服务即时通信系统(十二)---入口网关子服务
  • 北京工业大学25计专上岸经验分享
  • Spark-Streaming核心编程的总结
  • 全新升级:BRAV-7601-T003高性能无风扇AI边缘计算系统,助力智能未来!
  • 教育培训平台源码选型避坑指南:如何避免二次开发的高成本?
  • STM32 驱动 INA226 测量电流电压功率
  • 【MCP】从一个天气查询服务带你了解MCP
  • C++ 基础内容入门
  • Centos 7.6安装redis-6.2.6
  • 如何将 Apache Paimon 接入 Ambari?完整部署与验证指南
  • 14【模块学习】74HC595:使用学习
  • 网络安全漏洞现状与风险管理分析
  • 在web应用后端接入内容审核——以腾讯云音频审核为例(Go语言示例)
  • 优考试V4.20机构版【附百度网盘链接】
  • Jenkins(CI/CD工具)
  • 【计算机网络】UDP网络编程、英汉字典以及多线程聊天室编写
  • UML 活动图详解之小轿车启动活动图分析
  • 【dockerredis】用docker容器运行单机redis
  • ASP.NET图片盗链防护指南
  • Java接口默认方法冲突
  • 2025.4.27_C_Struct,Enum,Union
  • 单片机学习笔记9.数码管
  • Redis使用总结
  • 相机DreamCamera2录像模式适配尺寸
  • 使用c++实现一个简易的量子计算,并向外提供服务
  • 一文说清Token这个大模型中的数字乐高积木的作用
  • MIT6.S081 - Lab10 mmap(文件内存映射)