变量名的力量 11.1 Considerations in Choosing Good Names 选择好变量名的注意事项 The Most Important Naming Considerationi 最重要的命名注意事项 改名字要完全,准确地描述处该变量所代表的事物。Problem Orientation 以问题为导向 一个好记的名字反应的通常都是问题,而不是解决方案。一个好记的名字通常表达的是“什么(What)”,而不是“如何(How)”。例如,对一个用于表示打印机状态的位域来说,bitFlag就要比printerReady更具计算机特征。在财务软件里,calcVal的计算痕迹也要比Sum更明显。 所以,要使用printerReady和Sum来命名变量。Optimum Name Length 最适当的名字长度 当变量名的平均长度在10-16个字符的时候,调试程序所需要花费的气力是最小的。平均长度在8-20个字符的程序也几乎同样容易调试。The Effect of Scope on Variable Names 变量名对作用域的影响 ·对位于全局命名空间中的名字加以限定词。 C#,C++,可以用Namespace关键字来划分全局命名空间。Computed-value Qualifiers in Variable Names 变量名中的计算值限定词 很多程序都有表示计算结果的变量:Total,Sum,Average,Max,Min,Record,String,Pointer等等这样的限定词来修改某个名字,那么请记住把限定词加到名字的最后。
Common Opposites in Variable Names 变量名中的常用对仗词 对仗词的使用要准确。通过应用命名规则来提高对仗词使用的一致性,从而提高器可读性。以下是常用的对仗词: begin/end first/last locked/unlocked min/max next/previous old/new opened/closed visible/invisible source/target source/destination up/down11.2 Naming Specific Types of Data 为特定类型的数据命名 Naming Loop Indexes 为循环下标命名 如果循环不止几行,那么读者会很容易忘记i本来具有的含义,因此你最好给循环下标换一个更有意义的名字。 导致循环变长的原因之一是出现循环的嵌套使用。如果你是用了多个嵌套的循环,那么就应该给循环变量赋予更长的名字以提高可读性。Naming Status Variables 为状态变量命名 为状态变量取一个比Flag更好的名字Naming Temporary Variables 为临时变量命名 警惕“临时”变量Naming Boolean Variables 为布尔变量命名 1. 谨记典型的布尔变量名 下面一些格外有用的布尔变量名: done; error; found; succes(ok)等等 2. 给布尔变量赋予隐含“真/假”含义的名字。 例如,status和sourceFile这样的名字是很糟糕的布尔变量名,因为它们没有明确的True或者False。应该用error或者statusOK;sourceFileAvailable或sourceFileFound。 有些程序员喜欢在他们写的布尔变量名前加上Is。这样,变量名就变成一个问题:isdone?isError?isFound?用True或者False回答问题也就为变量给出了取值。 这个方法的优点之一是它不能用于那些模糊不清的名字:isStatus?这毫无意义。 缺点之一是降低了简单逻辑表达式的可读性:if(isFound)的可读性要略差于if(found)。 3. 使用肯定的布尔变量名 否定的名字如notFound等较难阅读,特别是如果它们被求反: if not notFoundNaming Enumerated Types 为枚举类型命名 在使用枚举类型的时候,可以通过使用组前缀,如Color_,Planet_或者_Month来明确表示该类型的成员都同属于一个组。 在有些编程语言里,枚举成员也总被冠以枚举名字前缀,比如Color.Color_Red或者Planet.Planet_Earth。那么重复上述前缀的意义就不大了,因此你可以把枚举类型自身的名字作为前缀,并把上述名字简化为Color.Red和Planet.Earth。Naming Constants 为常量命名 在具名常量时,应该根据该常量所表示的含义,而不是该常量所具有的数值为该抽象事物命名。11.3 The Power of Naming Conventions 命名规则的力量11.4 Informal Naming Conventions 非正式命名规则 ·Guidelines for a Language-Independent Convention 与语言无关的命名规则的指导原则 1. 区分变量名和子程序名 2. 区分类和对象 3. 标示全局变量 4. 标示成员变量 5. 标示类型声明 6. 标示具名变量 7. 标示枚举类型的变量 8. 再不能保证输入参数只读的语言里标示只读参数 9. 格式化命名以提高可读性·Guidelines for Language-Specific Conventions 与语言相关的命名规则的指导原则·Mixed-Language Programming Considerations 混合语言编程的注意事项·Sample Naming Conventions 命名规则示例11.5 Standardized Prefixes 标准前缀 ·User-Defined Type Abbreviations 用户自定义类型缩写 UDT缩写可以标识被命名对象或变量的数据类型。UDT缩写可以被用于表示象窗体,屏幕区域以及字体一类的实体。 ·Semantic Prefixes 语义前缀 语义前缀比UDT更进一步,它描述了变量或者对象是如何使用的。 ·Advantages of Standardized Prefixes 标准前缀的优点 标准前缀能够更为精确地描述一些含义比较模糊的名字。 标准化的前缀是名字更加紧凑。 在你的编译器不能检查你所用的抽象数据类型的时候,标准前缀能帮助你准确地对类型作出判断:paReformat=docReformat很可能不对,因为pa和doc是不同的UDT。11.6 Creating Short Names That Are Readable 创建具备可读性的短名字11.7 Kinds of names to Avoid 应该避免的名字 避免使用令人误解的名字或者缩写 避免使用具有相似含义的名字 避免使用具有不同含义但却有相似名字的变量 避免使用发音相近的名字 避免在名字里使用汉字 避免在名字中拼错单词 避免使用在英语中常常拼错的单词 不要仅靠大小写来区分变量名 避免使用多种自然语言 避免使用标准类型,变量和子程序的名字 不要使用与变量含义完全无关的名字 避免在名字中包含易混淆的字符Key Points 要点 ·好的变量名是提高程序可读性的一项关键要素。对特殊种类的变量,比如循环下标和状态变量,需要加以特殊的考虑。 ·名字要尽量地具体。那些太模糊或者太通用以致于能够用于多种目的的名字通常都是很不好的。 ·命名规则应该能够区分局部数据,类数据,和全局数据。它们还应该可以区分类型名,具名常量,枚举类型名字和变量名。 ·无论做哪种类型项目,你都应该采用某种变量命名规则。你所采用的规则的种类取决于你的程序的规模,以及项目成员的人数。 ·现代编程语言很少需要用到缩写。如果你真的要使用缩写,请使用项目缩写词典或者标准前缀来帮助理解缩写。 ·代码阅读的次数远远多于编写的次数。确保你所取的名字更侧重于阅读方便而不是编写方便。
杂还有这种问题....取容易记忆的名字贝.
临时变量, 循环变量可以用ijkt....甚至26个字母....
11.1 Considerations in Choosing Good Names
选择好变量名的注意事项
The Most Important Naming Considerationi 最重要的命名注意事项
改名字要完全,准确地描述处该变量所代表的事物。Problem Orientation 以问题为导向
一个好记的名字反应的通常都是问题,而不是解决方案。一个好记的名字通常表达的是“什么(What)”,而不是“如何(How)”。例如,对一个用于表示打印机状态的位域来说,bitFlag就要比printerReady更具计算机特征。在财务软件里,calcVal的计算痕迹也要比Sum更明显。 所以,要使用printerReady和Sum来命名变量。Optimum Name Length 最适当的名字长度
当变量名的平均长度在10-16个字符的时候,调试程序所需要花费的气力是最小的。平均长度在8-20个字符的程序也几乎同样容易调试。The Effect of Scope on Variable Names 变量名对作用域的影响
·对位于全局命名空间中的名字加以限定词。
C#,C++,可以用Namespace关键字来划分全局命名空间。Computed-value Qualifiers in Variable Names 变量名中的计算值限定词
很多程序都有表示计算结果的变量:Total,Sum,Average,Max,Min,Record,String,Pointer等等这样的限定词来修改某个名字,那么请记住把限定词加到名字的最后。
Common Opposites in Variable Names 变量名中的常用对仗词
对仗词的使用要准确。通过应用命名规则来提高对仗词使用的一致性,从而提高器可读性。以下是常用的对仗词:
begin/end
first/last
locked/unlocked
min/max
next/previous
old/new
opened/closed
visible/invisible
source/target
source/destination
up/down11.2 Naming Specific Types of Data
为特定类型的数据命名
Naming Loop Indexes 为循环下标命名
如果循环不止几行,那么读者会很容易忘记i本来具有的含义,因此你最好给循环下标换一个更有意义的名字。
导致循环变长的原因之一是出现循环的嵌套使用。如果你是用了多个嵌套的循环,那么就应该给循环变量赋予更长的名字以提高可读性。Naming Status Variables 为状态变量命名
为状态变量取一个比Flag更好的名字Naming Temporary Variables 为临时变量命名
警惕“临时”变量Naming Boolean Variables 为布尔变量命名
1. 谨记典型的布尔变量名
下面一些格外有用的布尔变量名:
done; error; found; succes(ok)等等
2. 给布尔变量赋予隐含“真/假”含义的名字。
例如,status和sourceFile这样的名字是很糟糕的布尔变量名,因为它们没有明确的True或者False。应该用error或者statusOK;sourceFileAvailable或sourceFileFound。
有些程序员喜欢在他们写的布尔变量名前加上Is。这样,变量名就变成一个问题:isdone?isError?isFound?用True或者False回答问题也就为变量给出了取值。
这个方法的优点之一是它不能用于那些模糊不清的名字:isStatus?这毫无意义。
缺点之一是降低了简单逻辑表达式的可读性:if(isFound)的可读性要略差于if(found)。
3. 使用肯定的布尔变量名
否定的名字如notFound等较难阅读,特别是如果它们被求反: if not notFoundNaming Enumerated Types 为枚举类型命名
在使用枚举类型的时候,可以通过使用组前缀,如Color_,Planet_或者_Month来明确表示该类型的成员都同属于一个组。
在有些编程语言里,枚举成员也总被冠以枚举名字前缀,比如Color.Color_Red或者Planet.Planet_Earth。那么重复上述前缀的意义就不大了,因此你可以把枚举类型自身的名字作为前缀,并把上述名字简化为Color.Red和Planet.Earth。Naming Constants 为常量命名
在具名常量时,应该根据该常量所表示的含义,而不是该常量所具有的数值为该抽象事物命名。11.3 The Power of Naming Conventions 命名规则的力量11.4 Informal Naming Conventions 非正式命名规则
·Guidelines for a Language-Independent Convention
与语言无关的命名规则的指导原则
1. 区分变量名和子程序名
2. 区分类和对象
3. 标示全局变量
4. 标示成员变量
5. 标示类型声明
6. 标示具名变量
7. 标示枚举类型的变量
8. 再不能保证输入参数只读的语言里标示只读参数
9. 格式化命名以提高可读性·Guidelines for Language-Specific Conventions
与语言相关的命名规则的指导原则·Mixed-Language Programming Considerations
混合语言编程的注意事项·Sample Naming Conventions
命名规则示例11.5 Standardized Prefixes
标准前缀
·User-Defined Type Abbreviations 用户自定义类型缩写
UDT缩写可以标识被命名对象或变量的数据类型。UDT缩写可以被用于表示象窗体,屏幕区域以及字体一类的实体。
·Semantic Prefixes 语义前缀
语义前缀比UDT更进一步,它描述了变量或者对象是如何使用的。
·Advantages of Standardized Prefixes 标准前缀的优点
标准前缀能够更为精确地描述一些含义比较模糊的名字。
标准化的前缀是名字更加紧凑。
在你的编译器不能检查你所用的抽象数据类型的时候,标准前缀能帮助你准确地对类型作出判断:paReformat=docReformat很可能不对,因为pa和doc是不同的UDT。11.6 Creating Short Names That Are Readable 创建具备可读性的短名字11.7 Kinds of names to Avoid 应该避免的名字
避免使用令人误解的名字或者缩写
避免使用具有相似含义的名字
避免使用具有不同含义但却有相似名字的变量
避免使用发音相近的名字
避免在名字里使用汉字
避免在名字中拼错单词
避免使用在英语中常常拼错的单词
不要仅靠大小写来区分变量名
避免使用多种自然语言
避免使用标准类型,变量和子程序的名字
不要使用与变量含义完全无关的名字
避免在名字中包含易混淆的字符Key Points 要点
·好的变量名是提高程序可读性的一项关键要素。对特殊种类的变量,比如循环下标和状态变量,需要加以特殊的考虑。
·名字要尽量地具体。那些太模糊或者太通用以致于能够用于多种目的的名字通常都是很不好的。
·命名规则应该能够区分局部数据,类数据,和全局数据。它们还应该可以区分类型名,具名常量,枚举类型名字和变量名。
·无论做哪种类型项目,你都应该采用某种变量命名规则。你所采用的规则的种类取决于你的程序的规模,以及项目成员的人数。
·现代编程语言很少需要用到缩写。如果你真的要使用缩写,请使用项目缩写词典或者标准前缀来帮助理解缩写。
·代码阅读的次数远远多于编写的次数。确保你所取的名字更侧重于阅读方便而不是编写方便。