关键词:clean code笔记,怎么写出干净整洁的代码
命名
有意义的命名。
-
避免误导
如一些有异义的缩写,不要让别人把你的名称翻译为他们所熟知的名称。
别用双关语。
别单个字母。在作用域较小时可以用i,j来循环计数(传统习惯)。 -
有意义的区分
如将函数的参数简单命名为a1, a2,改为source和destination则会像样许多。
一些含混的词,如info和data。
不要使用自造词。
不要使用俚语或者俗话。 -
类名
类名和对象名应该是名词或者名词短语。 -
方法名
方法名应当是动词或者动词短语。如get, set, is。 -
每个概念对应一个词
给每个概念选一个词,并且一以贯之。例如同一代码中不应该出现,get, fetch,controller, manager,driver会令人困惑的词。 -
使用解决方案领域的专业名称
最后:
取个好的名字最困难的地方在于需要良好的描述技巧和共有文化背景。
函数
-
短小
函数的第一条规则是短小,第二条是还要更短小。(当然,这无法证明) -
只做一件事
(额,ioctl默默不说话。ioctl这种应该属于特殊的。) -
自顶向下读代码:向下规则
我们想要让每个函数后面都跟着位于下一抽象层级的函数,这样一来,就能偱抽象层级向下阅读了。(额,我是向上规则0_0||。)
如:
void FuncA(void)
{
FuncB();
}
void FuncB(void)
{
}
-
可使用描述性的名称
不要害怕长名称,这样有益于理解。 -
命名方式要一致
-
函数参数
最理想的参数数量是0,其次是一,再次是二,应避免三个及以上。有足够理由才能用三个以上。多参数给测试带来了更多的麻烦。
当函数需要3个或者3个以上,说明可以将其中一些参数封装为类了。 -
动词和关键字
给函数取个好名字能较好的解释函数的意图,以及参数的顺序和意图。对于一元函数,函数和参数应当形成一种非常良好的动词/名词对形式。例如:write(name)。
注释
注释的恰当用法是弥补我们在用代码表达意图时遭遇的失败。注释总是一种失败,我们总是无法找到不用注释就可以表达自我的方法,所以总要有注释。
如果你发现自己需要写注释,那么再想想是否有办法翻盘 ,用代码来表达。为什么我极力贬低注释?因为注释会说谎。代码在改动,注释并没有随之改动,注释存在越久,就离其所描述的代码越远。程序员不能坚持维护注释。
好注释
有些注释是必须的,也是有利的。
- 法律信息
版权和著作权声明就是必须和有理由在每个源文件的开头注释处放置的内容。
提供信息的注释
注释解释某些返回值的说明。
对意图的解释
对某段代码进行注释
警告
日志式注释和属名
冗长的注释会让模块变得凌乱不堪,有代码控制器后应该删除掉。
注释掉的代码
直接把代码注释掉是种讨厌的做法。别这么干!
其他人不敢删除的注释代码,他们会想,代码依然放在这里一定有原因,而且这段代码比较重要不能删除。
格式
应当尽力保持代码行短小,死守80个字符的上限有点僵化。不换行有助于理解也可以到达120个字符,再多就有点肆意妄为了。
空格字符
空格字符可以把相关性较弱的 事物分割开。如在赋值操作符的周围加上空格字符,加强了分隔效果。
不在函数名与左括号之间加空格。这是因为函数与其参数密切相关。
把参数一一隔开,强调逗号,表示参数的相互分离的。
±符号有空格,乘法因子之间没有空格,因为他们有较高的优先级。加减发运算之间用空格隔开,其优先级较低。
水平对齐
缩进
空范围。如果while,for的语句体为空,把分号放到另外一行再加以缩进。
单元测试
整洁的测试应遵循以下5条规则(F.I.R.S.T)。
- 快速(Fast)
测试应该够快。 - 独立(independent)
测试应该相互独立。 - 可重复(repeatable)
测试应该在任何环境中重复通过。 - 自足验证(self-validating)
测试应该有布尔值输出。无论通过还是失败,你不应该通过看log日志来确认。 - 及时(timely)
测试应及时编写。单元测试应该恰好在使其通过的生产代码前编写。
看不下去了~
.
.
.