编写可读代码的艺术-代码应当易于理解

可读性基本定理——代码的写法应当使别人理解它所需的时间最小化
如果真的有人真的完全理解了你的代码,他就应该能改动它、找出缺陷并明白它是如何与你代码的其他部分交互的

就算你从事只有一个人的项目,这个目标也是值得的。那个其他人可能就是6个月的你自己,那时你自己的代码看上去已经很陌生了。而且你永远也不会知道——说不定别人会加入你的项目,或者你丢弃的代码会在其他项目里重用

把信息装到名字里

  1. 避免泛泛的名字(例如tmp和retval)

    tmp这个名字只应用于短期存在且临时性为其主要存在因素的变量

    retval这个名字没有包含很多信息,用一个描述该变量的值的名字来代替它

    像i、j等名字常用作所有索引,但有时候会有比i、j、k更贴切的命名。
    例如多重循环的时候,使用了错误的索引,这样的缺陷很难发现,使用更精确的名字可能会有帮助(索引的第一个字母与数据的第一个字符匹配)

  2. 用具体的名字代替抽象的名字
    在给变量、函数或者其他元素命名时,要把它描述得更具体而不是更抽象

  3. 使用前缀或后缀来给名字附带更多信息
    1.为名字附带更多信息
    一个变量名就像是一个小小的注释。尽管空间不是很大,但不管你在名中挤进任何额外的信息,每次有人看到这个变量名时都会同时看到这些信息。
    因此,如果关于一个变量有什么重要的事情的读者必须知道,那么是值得把额外的词添加到名字中的。
    例如,假设你有一个变量包含一个十六进制字符串
    string id;//例如:af84ef845cd8
    如果让读者记住这个ID的格式很重要的话,你可以把它改成hex_id

    2.带单位的值
    如果变量是一个度量的话(如时间长度或者字节数),那么最好把名字带上它的单位

    3.附带其他重要属性
    这种给名字附带额外信息的技巧不仅限于单位。在对于这个变量存在危险或者意外的任何时候你都该采用它

    例如:

    但不应该给每个变量都加上这样的属性,基本上,如果这是一个需要理解的关键信息,那就把它放在名字里

  4. 决定名字的长度
    当选择好名字时,有一个隐含的约束就是名字不能太长。
    名字越长越难记,在屏幕上占的地方也越大,可能会产生更多的换行

    另一方面,程序员也可能走另一个极端,只用单个单词(或者单一字母)的名字

    有一些指导原则:
    在小的作用域里可以使用短的名字
    作用域小的标识符不用带上太多信息,因为所有的信息(变量的类型、它的初值、如何析构等)都很容易看到,所以可以用很短的名字
    反之,如果一个标识符有较大的作用域,那么它的名字就要包含足够的信息以便含义更清楚

    输入长名字——不再是个问题
    有很多避免使用长名字的理由,但不好输入这一条已经不再有效。我们所见到的所有的编程文本编辑器都有内置的单词补全功能

    首字母缩略词和缩写——团队的新成员能否理解这个名字的含义?
    程序员有时候会采用首字母缩略词和缩写来命令,以便保持较短的名字,例如,把一个类命名为BEManager而不是BackEndManager。这种名字会让人费解。
    而使用eval来代替evaluation,用doc来代替document,用str来代替string是相当普遍的,因此团队的新成员看到FormatStr()可能会理解它是什么意思,然而,理解BEManager可能有点困难

    丢掉没用的词
    有时名字中的某些单词可以拿掉而不会损失任何信息。例如ConvertToString()就不如toString()这个更短的名字,而且也没有丢失任何有用的信息

  5. 利用名字的格式来表达含义
    有目的地使用大小写、下划线等——例如:可以在类成员和局部变量后面加上_来区分它们

posted @ 2024-09-27 11:28  狗狗没有坏心眼  阅读(3)  评论(0编辑  收藏  举报