代码变量命名方法和使用规范
一、匈牙利命名法
1 简介
匈牙利命名法(Hungarian Notation),是由1972年至1981年在施乐公司工作的程序员查尔斯.西蒙尼(Charles.Simony),此人后来成为微软的总设计师,因其祖籍是匈牙利,故有此名。
匈牙利命名法在国内之所以这么有名是因为当时微软对其推崇备至。在上世纪90年代,MFC的出现影响了一代代程序员,而MFC中各种类的命名是以匈牙利命名法命名的,再加上当时微软出了不错的书《Windows程序设计》推波助澜,而同时呢,国内UNIX编程风格氛围不强,这种命名法几乎成了国内变量命名法的标准。这就导致在现在的某些书籍或者项目中推荐使用匈牙利命名法
2 基本规则
匈牙利命名法的基本规则是:变量名=属性+类型+对象描述,其中每一个对象的名称都要求有明确含义,可以是对象名字全程或者一部分,同是要基于容易记忆理解的原则。
3 常用前缀
- 属性部分
前 缀 | 类 型 | 前 缀 | 类 型 |
---|---|---|---|
全局变量 | g_ | 常量 | c_ |
类的成员变量 | m_ | 静态变量 | s_ |
- 类型部分:类型值得是变量的类型,如整型、浮点型、字符串等。
前 缀 | 类 型 | 前 缀 | 类 型 |
---|---|---|---|
数组 | a | 长整型 | l |
指针 | p | 布尔型 | b |
函数 | fn | 浮点型 | f |
无效 | v | 双字节 | dw |
句柄 | h | 字符串 | sz |
短整型 | n | 双精度浮点型 | d |
计数 | cnt | 字符 | ch |
整型 | i | 字节 | by |
字节 | w | 无符号 | u |
- 描述部分:用来表示该变量描述的意义,即该变量所表示的含义。
前 缀 | 类 型 | 前 缀 | 类 型 |
---|---|---|---|
最大 | Max | 最小 | Min |
初始化 | Init | 临时变量 | Temp |
源对象 | Src | 目的对象 | Dest |
4 例子
变量定义的这些描述符号可以多个同时使用,顺序一般是m_,再指针,再简单数据类型,再其它。
hwnd: h类型描述,表示句柄;wnd是变量的对象描述,表示窗口,所以hwnd表示窗口句柄。
pfnEatApple: pfn是类型描述,表示指向函数的指针;EatApple是变量对象描述,所以pfnEatApple表示指向EatApple函数的函数指针变量。
m_lpszStr: m_表示是成员变量;l表示长整型;p表示指针;sz表示的是字符串;Str是对象描述;所以m_lpszStr的含义就是表示指向一个字符串的长指针成员变量。
二、驼峰命名法(小驼峰法)
1 简介
驼峰命名法是指混合使用大小写字母来构成变量和函数的名字,是以单个单词或多个单词组成变量或者函数的唯一标识符时,第一个单词以小写字母开始,第二个单词以及后面的每一个单词的首字母大写。
2 例子
下面是分别用骆驼式命名法和下划线法命名的同一个函数:
printEmployeePaychecks();使用了骆驼式命名法:函数名中的每一个逻辑断点都有一个大写字母来标记;
print_employee_paychecks();使用了下划线法:函数名中的每一个逻辑断点都有一个下划线来标记。
三、帕斯卡命名法(大驼峰法)
1 简介
帕斯卡(pascal)命名法与骆驼命名法类似。只不过骆驼命名法是首字母小写,而帕斯卡命名法是首字母大写
2 例子
public void DisplayInfo();
String UserName;
二者都是采用了帕斯卡命名法。在C#中,以帕斯卡命名法和骆驼命名法居多。
四、下划线命名法
所有字母均小写,每个单词间以下划线分割,样子像 “nginx_vip”
m_iMyData是一个匈牙利命名法,m_表示它是成员变量,小写的i说明了它是个整型,后面的和帕斯卡命名相同,指示了该变量的用途
myData是一个骆驼命名法,它第一个单词的第一个字母小写,后面的单词首字母大写,看起来像一个骆驼
MyData就是一个帕斯卡命名的示例
my_data是一个下划线命名的示例
五、下划线的使用(Python)
1 名称前的单下划线(如:_name)
用于指定属性和方法是“私有”的。但是Python不像Java一样具有私有属性、方法、类,在属性和方法之前加单下划线,只是代表该属性、方法、类只能在内部使用,是API中非公开的部分。如果用from import * 和 from import * 时,这些属性、方法、类将不被导入。
class Persion:
def init(self):
self._name="小明"
2 名称前的双下划线(如:__name)
以双下划线开头的方法和属性表示私有的方法和属性(可以近似这么理解,不太准确)。
用于禁止外部访问的类成员,不能用from xx import xx导入,只有类对象可以访问
class Persion:
def init(self):
self.__name="小明"
3 开头双下划线和双下划线结尾
特殊变量,特殊变量是可以直接访问的,不是私有变量。Python内部调用的方法,一般不建议在程序中调用。
if __name__ == '__main__':
print('我想输出点什么')
六、Java命名规范
包名:多单词组成时,所有字母都小写:xxxyyyzzz。
类名、接口名:多单词组成时,所有单词的首字母大写(大驼峰、帕斯卡命名法):XxxYyyZzz。
变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始的每一个单词首字母大写(小驼峰法):xxxYyyZzz
常量名:所有字母都大写,多单词时每个单词用下划线连接:XXX_YYY_ZZZ
七、参考
命名方法:https://blog.csdn.net/bailang_zhizun/article/details/82699
命名方法:https://www.jianshu.com/p/a8d1e05c6d68
下划线使用:https://www.cnblogs.com/endmoon/p/9657838.html
下划线使用:https://www.cnblogs.com/lhrbest/p/10281563.html
原文链接:https://blog.csdn.net/See_Star/article/details/102624388
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗