zoukankan      html  css  js  c++  java
  • 《代码大全2》阅读笔记06Chapter 11 The Power of Variable Names

    Chapter 11 The Power of Variable Names
     变量名的力量
    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/down

    11.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 notFound

    Naming 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 要点
    ·好的变量名是提高程序可读性的一项关键要素。对特殊种类的变量,比如循环下标和状态变量,需要加以特殊的考虑。
    ·名字要尽量地具体。那些太模糊或者太通用以致于能够用于多种目的的名字通常都是很不好的。
    ·命名规则应该能够区分局部数据,类数据,和全局数据。它们还应该可以区分类型名,具名常量,枚举类型名字和变量名。
    ·无论做哪种类型项目,你都应该采用某种变量命名规则。你所采用的规则的种类取决于你的程序的规模,以及项目成员的人数。
    ·现代编程语言很少需要用到缩写。如果你真的要使用缩写,请使用项目缩写词典或者标准前缀来帮助理解缩写。
    ·代码阅读的次数远远多于编写的次数。确保你所取的名字更侧重于阅读方便而不是编写方便。

    Desire has no rest.
  • 相关阅读:
    jvm 垃圾收集算法
    jvm 判断对象死亡
    jvm 内存分配
    jvm 对象奥秘
    mysql事务测试及delete和update是使用行级锁,还是表级锁
    sql语句中where后边的哪些条件会使索引失效 -- SQL语句优化
    java nio详解
    mysql数据库优化概述详解
    java 序列化和反序列化
    java io框架详解
  • 原文地址:https://www.cnblogs.com/samcn/p/1415139.html
Copyright © 2011-2022 走看看