目录

前言

11.1 选择好变量名的注意事项

11.1.1 最重要的命名注意事项

11.1.2 最适当的变量名字

11.1.3 变量名中的计算值限定词

11.1.4 变量名中常用的对仗词

11.2 为特定类型的数据命名

11.2.1 为循环下标命名

11.2.2 为状态变量命名

11.2.3 为临时变量命名

11.2.4 为布尔变量命名

11.2.5 为枚举变量命名

11.2.6 为常量命名

11.3 命名规则的力量

11.3.2 何时采用命名规则

11.4 非正式命名规则

11.5 标准前缀

11.6 创建具备可读性的短名字

11.7 应该避免的名字


《Code_Complete_2》持续更新中......_@来杯咖啡的博客-CSDN博客这本书有意设计成使你既可以从头到尾阅读,也可以按主题阅读。1. 如果你想从头到尾阅读,那么你可以直接从第2章“用隐喻来更充分地理解软件开发”开始钻研。2. 如果你想学习特定的编程技巧,那么你可以从第6章“可以工作的类”开始,然后根据交叉引用的提示去寻找你感兴趣的主题。3. 如果你不确定哪种阅读方式更适合你,那么你可以从第3章3.2节“辦明你所从事的软件的类型”开始。.....................https://blog.csdn.net/qq_43783527/article/details/126275083

前言

本章所述原则主要适用于为变量——对象和基本数据———命名。不过它们也适用于为类、包、文件以及其他的编程实体命名。有关如何为子程序命名请参阅第7.3节“好的子程序名字”。

11.1 选择好变量名的注意事项

一个好的变量名是可读的易记的恰如其分的。你可以通过应用多条原则来实现这些目标。

11.1.1 最重要的命名注意事项

为变量命名时最重要的考虑事项是,该名字要完全准确地描述出该变量所代表的事物获得好名字的一种实用技巧就是用文字表达变量所代表的是什么

  • currentDate 和 todaysDate 都是很好的名字,因为它们都完全而且准确地描述出了“当前日期”这一概念。
  • date 看上去不错,但经过最后推敲它也只是个坏名字,因为这里所说的日期并不是所有的日期均可,而只是特指当前日期;而 date 本身并未表达出这层含义

11.1.2 最适当的变量名字

  • 对于一个表示美国奥林匹克代表团成员数量的变量,你可能会把它命名为numberofPeopleonTheUsolympicream。
  • 表示运动场中坐椅数量的变量可能会命名为 numberofseatsInThestadium。
  • 表示某国代表团在现代奥运会上获得的最高分数的变量可能会命名为 maximumNumberofPointsInModernolympics。
  • 表示当前利率的变量最好命名为 rate 或 interestRate,而不是r或x。

变量名的最佳长度似乎应该介于 x 和 maximumMumberofPointsInModernOlympics 之间。太短的名字无法传达足够的信息。诸如x1和 x2这样的名字所存在的问题是,即使你知道了x代表什么,你也无法获知x1 和x2之间的关系。太长的名字很难写,同时也会使程序的视觉结构变得模糊不清。
        当变量名的平均长度在10 到16 个字符的时候,调试程序所需花费的气力是最小的(1990)。平均名字长度在8到20个字符的程序也几乎同样容易调试。这项原则并不意味着你应该尽量把变量名控制在9到15或者10到16 个字符长。它强调的是,如果你查看自己写的代码时发现了很多更短的名字,那么你需要认真检查,确保这些名字含义足够清晰。

11.1.3 变量名中的计算值限定词

很多程序都有表示计算结果的变量:总额、平均值、最大值,等等。如果你要用类似于 Total、 Sum、 Average、 Max、 Min、 Record、 String、 Pointer 这样的限定词来修改某个名字,那么请记住把限定词加到名字的最后

这种方法具有很多优点。首先,变量名中最重要的那部分,即为这一变量赋值主要含义的部分应当位于最前面,这样,这一部分就可以显得最为突出,并会被首先阅读到。类似 revenuerTotal(总收入)、expenserTotal(总支出)、revenueAverage(评价收入)、expenseAverage(平均支出)这组名字的变量具有非常优雅的对称性。

  • 用 Count 或者 Total 来代表员工的总数;
  • 用 Index 来指代某个特定的员工。这样,customercount 就代表员工的数,customerIndex 代表某个特定的员工。

11.1.4 变量名中常用的对仗词

  • begin/end
  • first/last
  • locked/unlocked
  • min/max
  • next/previous
  • old/new
  • opened/closed
  • visible/invisible
  • source/target
  • source/destination
  • up/down

11.2 为特定类型的数据命名

在为数据命名的时候,除了通常的考虑事项之外,为一些特定类型数据的命名还要求做出一些特殊的考虑。本节将讲述与循环变量状态变量临时变量布尔变量枚举类型具名常量有关的考虑事项。

11.2.1 为循环下标命名

循环是一种极为常见的计算机编程特征,为循环中的变量进行命名的原则也由此应运而生。i、j和k这些名字都是约定俗成的

1、 如果一个变量要循环之外使用,那么就应该为它取一个比i、j或者k更有意义的名字。举个例子,如果你在从文件中读取记录,并且需要记下所读取记录的数量,那么类似于 recordCount 这样的名字就很合适:

2、如果循环体有较多行,那么读者会很容易忘记 i本来具有的含义,因此你最好给循环下标换一个更有意义的名字。由于代码会经常修改、扩充,或者复制到其他程序中去,因此,很多有经验的程序员索性不使用类似于 i这样的名字。导致循环变长的常见原因之一是出现循环的嵌套使用。如果你使用了多个嵌套的循环,那么就应该给循环变量赋予更长的名字以提高可读性:

11.2.2 为状态变量命名

状态变量用于描述你的程序的状态。下面给出它的命名原则。

为状态变量取一个比 flag 更好的名字 。最好是把标记(flag)看做状态变量。标记的名字中不应该含有 flag,因为你从中丝毫看不出该标记是做什么的。为了清楚起见,标记应该用枚举类型、具名常量,或用作具名常量的全局变量来对其赋值,而且其值应该与上面这些量做比较。下面例子中标记的命名都很差:

像 statusF1ag= 0x80 这样的语句是反映不出这段代码能做什么的,除非你亲自写了这段代码,或者有文档能告诉你 statusFlag 和 0x80 的含义。下面是作用相同但更为清晰的代码:

11.2.3 为临时变量命名

略。

11.2.4 为布尔变量命名

下面是为布尔变量命名时要遵循的几条原则。
        1、谨记典型的布尔变量名 。下面是一些格外有用的布尔变量名:

  • done。 用 done 表示某件事情已经完成。这一变量可用于表示循环结束或者一些其他的操作己完成。在事情完成之前把 done 设为 false,在事情完成之后把它设为 true。
  • error。 用 error 表示有错误发生。在错误发生之前把变量值设为 false,在错误已经发生时把它设为 true。
  • found 。用 found 来表明某个值已经找到了。在还没有找到该值的时候把found 设为 false,一旦找到该值就把 found 设为 true。在一个数组中查找某个值,在文件中搜寻某员工的 ID,在一沓支票中寻找某张特定金额的支票等等的时候,都可以用 found。
  • Success 或 ok。 用 success 或 ok 来表明一项操作是否成功。在操作失败的时候把该变量设为 false,在操作成功的时候把其设为 true。如果可以,请用一个更具体的名字代替success,以便更具体地描述成功的含义。如果完成处理就表示这个程序执行成功,那么或许你应该用 processingComplete 来取而代之。如果找到某个值就是程序执行成功,那么你也许应该换用 found。

  2、使用肯定的布尔变量名。  否定的名字如 notFound、 notdone 以及 notSuccessful等较难阅读,特别是如果它们被求反:if not notFound。

  • 这样的名字应该替换为 found、 done 或者 processingComplete,然后再用适当的运算符求反。如果你找到了想找的结果,那么就可以用 found 而不必写双重否定的 not notFound了。

11.2.5 为枚举变量命名

在使用枚举类型的时候,可以通过使用组前缀,如 Color_,Planet_或者Month_来明确表示该类型的成员都同属于一个组。下面举一些通过前缀来确定枚举类型元素的例子:

在有些编程语言里,枚举类型的处理很像类,枚举成员也总是被冠以枚举名字前缀,比如 Color.Color_Red 或者 Planet. Planet_Earth(java语言就是这样)。如果你正在使用这样的编程语言,那么重复上述前缀的意义就不大了,因此你可以把枚举类型自身的名字作为前缀,并把上述名字简化为 Color. Red 和 Planet. Earth。

11.2.6 为常量命名

具名常量时,应该根据该常量所表示的含义,而不是该常量所具有的数值为该抽象事物命名。FIVE 是个很糟的常量名(不论它所代表的值是否为 5.0)。CYCLES_NEBDED 是个不错的名字。CYCLES_NEEDED 可以等于 5.0 或者 6.0。而 FIVE=6.0 就显得太可笑了。出于同样原因,BAKERS_DOZEN 就是个很糟的常量名;而DONUTS_MAX 则很不错。

11.3 命名规则的力量

11.3.2 何时采用命名规则

没有金科玉律表明何时应该建立命名规则,但是在下列情况下规则是很有价值的:

  • 当多个程序员合作开发一个项目时
  • 当你计划把一个程序转交给另一位程序员来修改和维护的时候(这几乎总是会发生)
  • 当你所在组织中的其他程序员评估你写的程序的时候
  • 当你写的程序规模太大,以致于你无法在脑海里同时了解事情的全貌,而必须分而治之的时候
  • 当你写的程序生命期足够长,长到你可能会在把它搁置几个星期或几个月之后又重新启动有关该程序的工作时
  • 当在一个项目中存在一些不常见的术语,并且你希望在编写代码阶段使用标准的术语或者缩写的时候

你一定会因使用了某种命名规则而受益。上述诸多注意事项将会帮助你决定在一个特定项目中按照何种程度来制定规则里所使用的规则的范围。

11.4 非正式命名规则

11.5 标准前缀

11.6 创建具备可读性的短名字

11.7 应该避免的名字

《代码大全2》第11章 变量名的力量相关推荐

  1. 读书笔记_代码大全_第14章_组织直线型代码_第15章_使用条件语句

    组织直线型代码 + 使用条件语句 希望我的读书笔试能带你翻过18页的书 http://www.cnblogs.com/jerry19880126/ <代码大全>第14章和第15章的内容比较 ...

  2. 读书笔记_代码大全2第十一章_选择好的变量名

    选择好的变量名的注意事项 名字要准确的描述出该变量所代表的事物(eg:好的变量名:currentDate,todayDate坏的变量名:cd,date) 以问题为导向 平均长度在10-16和8-20个 ...

  3. 读书笔记_代码大全2第十章_变量初始化

    变量初始化原则 声明变量的同时初始化. 在靠近变量第一次使用的位置初始化(就近原则). 最好在靠近变量第一次使用的位置声明和定义变量. 在可能的情况下使用final或const(可以防止变量在初始化之 ...

  4. 读书笔记_代码大全2第七章_高质量的子程序

    创建子程序的正当理由 降低复杂度 把嵌套的部分提取出来形成一个独立的子程序,可以降低外围子程序的复杂度. 引入中间,易懂的抽象 避免代码重复 支持子类化 可覆盖的子程序保持简单,那在实现派生类时也会减 ...

  5. 代码大全(Code Complete)-- 目录和关键点

    读后感 <代码大全>是一本指导"代码构建"的书,指导我们如何写出优秀的代码,如何成为优秀的程序员. 这样一本900多页的大部头书,当我们基于既往的编程经验,在读每一个部 ...

  6. 【转】读《代码大全2》

    第1部分 打好基础 译序   应该首先为人编写代码,其次才是为机器   第1章 欢迎进入软件构建的世界   提高关键的质量和开发者的生产效率都是很重要的   构建活动会占到整个软件开发时间的30%~8 ...

  7. 《代码大全2》读书笔记

    第7章 高质量的子程序 7.1 创建子程序的正当理由 降低/隔离复杂度,隐藏实现细节,引入中间的.易懂的抽象 避免代码重复,支持子类化 提高可移植性,限制变化所带来的影响 简化复杂的逻辑判断,改善性能 ...

  8. 修改变量名,简单有效地提高代码质量!

    全文共6633字,预计学习时长13分钟 图片来源:pexels.com/@digitalbuggu 请快速说出以下代码的功能: 很难,对吧?要想对这段代码进行修改或调试,除非知道作者在想什么,否则将难 ...

  9. python的有效变量名_python里用变量命名改善代码质量

    编程时,总会遇到各种各样的变量,取一个好的变量名能够有效提高代码的可读性,而且python是一种,动态类型的语言,良好的变量名,能够在编写代码或者再次阅读代码时提高效率. 1. 变量名不要太宽泛,要有 ...

最新文章

  1. matlab固定床反应器,合成气完全甲烷化固定床反应器数值模拟
  2. Nodejs的模块系统以及require的机制
  3. [云炬创业学笔记]第一章创业是什么测试4
  4. wifi定位算法android,WIFI定位算法
  5. Symbol MC1000 扫描 冲突问题 把下面文件做成scanwedge.reg的注册表文件,放在Application重起
  6. 【自考总结】寒冬里的温暖
  7. [CodeForces]Codeforces Round #432 (Div. 2)
  8. ASP.NET Application,Session,Cookie和ViewState等对象用法和区别
  9. 基于ffmpeg+SDL的加密视频播放器的开发(一)
  10. java项目开发经验总结,值得收藏!
  11. @Scheduled定时器,每月1号执行
  12. webfont应用系列(二)如何制作图标字体?
  13. XML/HTML/CSS/JS之间的区别和联系
  14. python seo 采集内容_SEO如何处理采集内容(4)–转自{GoGo闯}
  15. java 对象数据 搜索,Java数据对象JDO 2.0查询语言的特点
  16. \t\t【团队精神】荣辱与共 交流分享 精诚协作 尊重理解 ——程序员应知
  17. 互亿天线短信接口php文档
  18. 怎样改变照片大小?免费在线图片压缩方法
  19. js 封装cookie
  20. User-Agent大全

热门文章

  1. 永恒python和深渊_【2019校招真题】魔法深渊(python)
  2. logomaker 标智客去除水印
  3. 换小米mix2s信号座(射频座)
  4. Java注解篇(一)四大元注解@Target@Retention@Documented注解
  5. 中国管理信息化杂志中国管理信息化杂志社中国管理信息化编辑部2022年第22期目录
  6. 推荐的看电影网站,值得拥有
  7. iphone如何设置微信腾讯服务器,iPhone手机的微信怎么设置成夜间模式?
  8. Python3快速入门—10.知识扩展
  9. java arrays_Java中Arrays详解
  10. 使用apache搭建代理服务器