Ethan Lab 软件开发 · 产品管理 · 科技评测
返回研究笔记

现有命名方法汇整及比较

更新于

命名规则是为了增加识别和可读性,没有强制的规定,但一旦选择其中一种,会建议编写时统一格式;而化学、天文、生物也有其惯用的命名方法;大部分的编程语言也有对此进行建议,以统一风格。

在编程的命名上,当变量、函数及类别等名称由两个以上的单字组合,就可以使用现有的命名方法,增加识别和可读性。目前已经出现的命名方法,可以分为Underscore(底线式)、Camel-case(驼峰式)及Hungarian notation(匈牙利命名法)三大类。此文进行汇整,并以个人经验,探讨其优缺点。


一、Underscore(底线式):

单字之间使用底线分隔,GNU/Linux环境中最常见,例如:string_name。

优点:

使用底线取代空格,阅读上比较直觉易懂。

缺点:

比起Camel-case使用前缀大写取代空格,底线比较少在日常输入,因此需要适应。


二、Camel-case(驼峰式):

单字之间使用大写分隔,又可以分为Lower Camel-case(小驼峰式),或Upper
Camel-case(大驼峰式),而后者又称为Pascal-case(帕斯卡式)。

Lower Camel-case(小驼峰式):
第一个字母用小写,此变化常用在变量名称上,例如stringName。

Upper Camel-case(大驼峰式):
第一个字母用大写,此变化常用在函数、类别、属性及命名空间上,例如StringName。

优点:

  • 可以利用名称前缀的大小写,区分变量,以及函数、类别等其他类型。
  • 单字之间使用大写取代底线,能够减少名称的长度,减少代码超出窗口被遮挡的情况。

缺点:

  • 比起Underscore使用底线取代空格,阅读上较不直觉易懂。

三、Hungarian notation(匈牙利命名法)

在Camel-case(驼峰式)的基础上,在名称前缀添加预先约定好的缩写,例如约定如下:

b       boolean
c       character
str     C++ String
si      short integer
i       integer
li      long integer
f       floating point
d       double-precision floating point
ld      long double-precision floating point
sz      Old-Style Null Terminated String
if      Input File Stream
is      Input Stream
of      Output File Stream
os      Output Stream
S       declaring a struct
C       declaring a class

Source: http://web.mst.edu/~cpp/common/hungarian.html

根据缩写用途的不同,又可分为Systems Hungarian,以及Apps Hungarian。

Systems Hungarian:
名称前前缀代表的是实际的数据类型,例如:strName。

Apps Hungarian:
名称前缀代表的是目的或其他提示,例如:usName,其中us代表unsafe,为了避免Code injection或XSS,之后必须进行过滤处理。

优点:

  • 不需要IDE支持,就能够从名称能看出类型。
  • 制定好的编码规则,能够在搜索时更加统一易找。
  • 制定好的编码规则,能够在命名及输入上更快。

缺点:

  • 需要另外学习编码规则。
  • 现代IDE已经可以轻易的区分类型,在数据类型上,此方法稍嫌多余。
  • 变量类型修改时,名称也必须修正维护。
  • 采用缩写来命名,对新手较不友善,例如szName,不如stringZeroName。
  • 也更容易造成歧义,例如szName,更容易被误读成其他意思,也难以通过猜测关键字搜索。