21变量名的力量_2

4. 非正式命名规则

4.1. 与语言无关的命名规则的指导原则
  • 区分变量名和子程序名——例如 变量名为:variableName,子程序名为:getName()

  • 区分类和对象

    //方案1:通过大写字母开头区分类型和变量
    Widget widget;
    LongerWidget longerWidget;
    //方案2:通过对变量采用更明确的名字区分类型和变量
    Widget aWidget;
    LongerWidget fullEmployeeWidget;
    
  • 标识全局变量——例如:g_runningTotal

  • 标识成员变量——例如:m_isRunning

  • 标识类型声明——可以为类型名增加前缀,例如: t_Color

  • 标识具名常量——可以全部使用大写,如果有可能,用下划线来分割单词,例如:LINES_PER_PAGE_MAX

  • 标识枚举类型的元素——可以全部用大写,或者为类型名增加 e_ 或则 E_ 前缀

  • 在不能保证输入参数只读的语言里标识只读参数——可以为输入参数增加一个 const 前缀

  • 格式化命名以提高可读性——用两种常用方法可以用来提高可读性,那就是用大小写和分割符来分割单词。例如 GYMNASTICSPOINTTOTAL 就比 GymnasticsPointTotal 或者 gymnastics_point_total 难读的多

4.2 与语言相关的命名规则的指导原则
(1)C 的命名规则
  • c 和 ch 是字符变量
  • i 和 j 是整数下标
  • n 是某物的数量
  • p 是指针
  • s 是字符串
  • 预处理宏全部大写(ALL_CAPS),这通常包括 typedef
  • 变量名和子程序名全部小写 (all_lowercase)
  • 下划线(_)用做分隔符: letters_in_lowercase 要比 lettersinlowercase 更具可读性
(2)C++ 的命名规格
  • i 和 j 是整数下标

  • p 是指针

  • 常量、typedef 和预处理宏全部大写(ALL_CAPS)

  • 类和其他类型的名字混合大小写(MixedUpperAndLowerCase)

  • 变量名和函数名中的第一个单词小写,后续每个单词的首字母大写——例如:gymnasticsPointTotal

  • 不把下划线用做名字中的分隔符,除非用于全部大写的名字以及特定的前缀中(例如标识全局变量的前缀)

    与 C 编程相比,上述规则还远远没有形成标准,并且不同的环境也会形成不同的具体规则

(3)Java 的命名规则

​ 与 C 和 C++ 不同,Java 语言的风格约定从一开始就创建好了。

  • i 和 j 是整数下标
  • 常量全部大写(ALL_CAPS)并用下划线分割
  • 类名和接口名中每个单词的首字母均大写,包括第一个单次——例如, ClassOrInterfaceName
  • 变量名和方法名中第一个单次的首字母小写,后续单次的首字母大写——例如, VariableOrRoutineName
  • 除用于全部大写的字母之外,不使用下划线作为名字中的分隔符
  • 访问器子程序使用 get 和 set 前缀
4.3 混合语言编程的注意事项

​ 在混合语言环境中编程时,可以对命名规则(以及格式规则、文档规则等)做出优化以提高整体的一致性和可读性。

4.4 命名规则示例

​ 变量名一般包含了以下三类信息:

  • 变量的内容(它代表什么)

  • 数据的种类(具名常量、简单变量、用户自定义类型或者类)

  • 变量的作用域(私有的、类的、包的或者全局作用域)

(1)C++ 和 Java 的命名规则

ClassName 							类名混合使用大小写,首字母大写
TypeName							类型定义,包括枚举类型和 typede,混合使用大小写,首字母大写
EnumeratedTypes						 除遵循上述规则以外,枚举类型总以复数形式表示
localVariable						局部变量混合使用大小写,首字母小写。其名字应该与底层数据类型无									   关,而且应该反映该变量所代表的事物
routineParameter					子程序参数的格式与局部变量相同
routineName()						子程序名混合使用大小写(建议首字母小写)
m_classVariable						对类的多个子程序可见(且只对该类可见)的成员变量用 m_ 前缀
g_globalVariable					全局变量名用 g_ 前缀
CONSTANT						    具名常量全部大写
MACRO							    宏全部大写
Base_EnumeratedType				     枚举类型名用能够反映其基础类型的、单数形式的前缀——例										   如,Color_Red, Color_Blue

(2)C 的命名规则

TypeName						    类型名混合使用大小写,首字母大写
GlobalRoutineName()					 公用子程序名混合使用大小写
f_FileRoutineName()					 单一模块(文件)私用的子程序名用 f_ 前缀
Localvariable						局部变量混合使用大小写。其名字应该与底层数据类型无关,而且应
								    该变量所代表的事物
RoutineParameter					子程序参数的格式与局部变量相同		
f_FileStaticVariable				 模块(文件)变量名用 f_ 前缀
G_GLOBAL_GlobalVariable				 全局变量名义 G_ 前缀和一个能反映定义该变量的模块(文件)的、全									 部大写的名字的开始——例如, G_SCREEN_Dimensions
LOCAL_CONSTANT						单一子程序或者模块(文件)私用的具名常量全部大写,例如, 									   POWS_MAX
G_GLOBALCONSTANT					全局具名常量全部大写,并且以 G_ 前缀和一个能反映定义该具名常量									的模块(文件)的、全部大写的名字开始, 如 G_SCREEN_ROWS_MAX	
LOCALMACRO()						单一程序或者模块(文件)私用的宏定义全部用大写
G_GLOBAL_MACRO()					全局宏定义全部大写,并且以 G_ 前缀和一个能反映定义该宏的模块								  (文件)的全部大写名字开始——例如, G_SCREEN_LOCATION()

5. 标准前缀

​ 对具有通用含义的前缀标准化,为数据命名提供了一种简洁、一致并且可读性好的方法。

5.1 用户自定义类型缩写
用户自定义类型(UDT)缩写可以标识被命名对象或变量的数据类型。UDT 缩写可以被用于表示像窗体、屏幕区域以及字体一类的尸体。UDT 缩写通常不会表示任何由编程语言所提供的预置数据类型。
5.2 语义前缀

​ 语义前缀比 UDT 更近一步,它描述了变量或者对象如何使用的。

5.3 标准前缀的优点

6. 创建具备可读性的短名字

6.1 缩写的一般指导原则
  • 使用标准的缩写(列在字典中的那些常见缩写)
  • 去掉所有非前置元音。(computer 变成 cmptr,screen 变成 scrn, apple 变成 appl, integer 变成 intgr)
  • 去掉虚词 and、or、the 等
  • 使用每个单词的第一个或前几个字母
  • 统一地在每个单词的第一、第二或者第三(选择最合适的一个)字母后面截断
  • 保留每个单词的第一个和最后一个字母
  • 使用名字中的每一个重要单词,最多不超过三个
  • 去除无用后缀——ing、ed 等
  • 保留每个音节中最引人注意的发音
  • 确保不要改变变量的含义
  • 反复使用上述技术,直到你把每个变量名的长度缩减到了 8 到 20 个字符,或者达到你所用的编程语言对变量名的限制字符数。
6.2 语音缩写

​ 有些人倡导基于单词发音而不是拼写来创建缩写、于是 skating 就变成了sk8ing, highlight 就变成了 hilite, before 变成了 b4, execute 变成了 xqt , to 变成了 2。

6.3 有关缩写的评论

​ 在创建缩写时,需要避免以下陷阱。

  • 不要用从每个单词中删除一个字符的方式来缩写
  • 应该一直使用相同的缩写。例如,要么全用 Num, 要么全用 No, 不要两个都用
  • 创建你能读出来的名字。 用 xPos 而不用 xPstn
  • 避免使用容易看错或者读错的字符组合
  • 使用辞典来解决命名冲突
  • 在代码里使用缩写对照表解释极短的名字的含义
  • 在一份项目级的“标准缩写”文档中说明所有的缩写
  • 记着,名字对于代码读者的意义要比对作者更重要

7. 应该避免的名字

  • 避免使用令人误解的名字或缩写
  • 避免使用具有相似含义的名字
  • 避免使用具有不同含义但却有相似名字的变量
  • 避免在名字中使用数字
  • 避免在名字中拼错单次
  • 避免使用英语中常常拼错的单词
  • 不要仅靠大小写来区分变量名
  • 避免使用多种自然语言
  • 避免使用标准类型、变量和子程序的名字
  • 不要使用与变量名含义完全无关的名字
  • 避免在名字中包含易混淆的字符

posted @ 2020-07-15 14:29  洛克十年  阅读(157)  评论(0编辑  收藏  举报