c进阶篇(二)——编程命名规范

前言:
  目前嵌入式常用的编程命名规范有驼峰命名法、匈牙利命名法、下划线命名法等。几种命名规范各有特色,但原则是开发人员之间保持统一的一套规范,如果是在现有的代码上开发,那么最好继续保持代码当前使用的编程规范,而不是盲目坚持自己的习惯。换句话说建议对几种常用命名规范都有所熟悉。有些公司是针对不同的“对象”使用不同的命名规范,比如变量名、方法名、类名等,结合多种命名规范各自的优势。写代码也有很多年了,有必要对编程命名规范进行一次整理总结。

1 常见命名规范

  如何增强代码的可读性,除了良好的架构设计、合理的模块划分、适当的抽象化设计、简洁明了的规范注释等外,命名规范也在可读性上发挥了至关重要的作用。好的编程习惯在多人协作开发和代码维护时十分重要,编程人员按照统一的规范“表达”便于彼此理解交流。
  好的编程命名规范应该具有以下特性。

  • 见名知意:命名能表达出实际含义,如MaxLenth、MinLenth,好的命名不需要过多的注释说明;
  • 长短适中:过短的命名不能表达出足够的“意图”,但过长的命名显得累赘,难以阅读和编辑。可以适当的运用单词缩写,建议为工程形成一份简写含义说明表;
  • 避免相似:避免在代码里编辑一些含义和书写过于相似的命名,比如inputValue、inputData、getData、entryData;
  • 规范一致:规范跟着工程代码走,不管谁来开发,不管多少人协作开发,都应该保持一套统一的规范,否则会把代码写乱;
  • 统一语言:同英语一样,法语也是26个字母组成,如果英语法语命名混用容易误导阅读。现在还有一些编程语言支持多种自然语言文字编辑,比如Python3支持简体汉字和日文片假名。应避免多种语言混合在一起使用;

  目前常用的命名规范有。

  • 驼峰命名法(Camel Case);
  • 匈牙利命名法(Hungary Case);
  • 蛇形命名法(Snake Case);
  • 帕斯卡命名法(Pascal Case);

2 驼峰命名法(Camel Case)

2.1 小驼峰(Lower Camel Case)

  除第一个单词首字母使用小写外,其余单词首字母均用大写,单词剩余字母均用小写。单词之间不使用空格或连字符连接,例如: setLength()studentName

2.2 大驼峰(Upper Camel Case)

  所有单词首字母都采用大写,单词剩余字母均用小写。单词之间不使用空格或连字符连接,例如: SetLength()StudentName

2.3 特点

  驼峰命名排版紧凑,单词之间不使用连字符,虽然首字母大写但当命名比较长时阅读困难;使用驼峰命名意味着命名是区分大小写的,在进行名称搜索时要注意区分;一些全大写的词组会打乱驼峰大小写的命名规则,例如: getADCValue()setPWMFrequency ,因为ADC、PWM等词一般全用大写。

3 匈牙利命名法(Hungary Case)

  匈牙利命名规则是 变量名 = 属性 + 类型 + 对象描述 。匈牙利命名法在命名开头使用标识符作为前缀,标识符表达了作用域,类型等,也即规则中的属性和类型。标识符由一个或多个小写字母构成,可以是多个标识符同时组合作为前缀,例如: g_bypSlaveAddress 。规则中的对象描述一般按驼峰命名法表达。

前缀 含义
a 数组(array)
b 布尔(boolean)
by 字节uint8_t(byte)
c 有符号字符(char)
c_ 常量(const)
d 双精度浮点(double)
dw 双字uint32_t(double word)
f 浮点(float)、文件(file)
fn 函数(function)
g_ 全部变量(global)
h 句柄(handle)
i 整形(int)
l 长整型(long int)
m_ 类成员
n 短整形(short int)
p 指针(pointer)
s 字符串(string)
s_ 静态变量(static)
u 无符号(unsigned)
w 单字uint16_t(word)

3.1 特点

  匈牙利命名最大的特点是增加前缀说明,使得命名的表达更加准确清楚;由于匈牙利命名法通过增加前缀来表达命名的作用域和类型,也即一旦对作用域或类型有了修改,命名也必须在所有调用处和声明处相应修改;增加了前缀的表达即使得表达的信息更准确,也使得程序员要人工去注意变量的类型和命名表达是否准确一致;容易出现懒惰而导致含义不清的表达,例如: g_byaData ,这样命名表达了作用域和类型,乍一看表达“充分”且符合命名规则,但没有对变量的实际用途进行描述,是糟糕的命名;匈牙利命名对一些基本的类型进行前缀说明,但是自定义的一些抽象的数据类型没有确定的前缀说明,如果一一去定义则显得繁多和难以记忆;

4 蛇形命名法(Snake Case)

  蛇形命名法又名下划线命名法,字母全用小写,单词之间用下划线连接,例如: first_name last_name

4.1 特点

  由于单词之间增加了连字符“-”,因此蛇形命名法布局风格较为宽松,使得较长的命名表达更容易阅读;松散也使得更容易写出较长的表达式;蛇形命名法统一只使用小写,因此搜索时不需要区分大小写;也由于只用小写,因此不利于一些大写名词的表达,例如:ADC、PWM、RGB等;容易导致下划线滥用,例如: _namename__name___name__

5 帕斯卡命名法(Pascal Case)

  该命名法规则其实同大驼峰命名法,所有单词首字母都采用大写,单词剩余字母均用小写。单词之间不使用空格或连字符连接,例如: FirstNameLastName

5.1 特点

  特点同大驼峰命名法。排版紧凑,单词之间不使用连字符,虽然首字母大写但当命名比较长时阅读困难;使用驼峰命名意味着命名是区分大小写的,在进行名称搜索时要注意区分;一些全大写的词组会打乱驼峰大小写的命名规则,例如: ADCSampleValuePWMFrequency ,因为ADC、PWM等词一般全用大写。