如何提高代码质量?( 十 )

在 elixir 的 linter 里,我把 ABC complexity size 设置为 70,Cyclomatic complexity 设置为 15。所谓 ABC complexity,是代码里的 assignments(A),branches(B),conditionals(C) 的平方之和开方根的结果,它代表了一段代码有多冗长。Cyclomatic complexity,或者说循环复杂度,是指由程序的源代码中量测线性独立路径的个数,它代表了一段代码有多难懂(我们的小脑仁最不擅长同时记几件事情,比如情人节和结婚纪念日)。还有一些其他的设置,比如 nesting(嵌套层数)不超过 3, arity(函数的秩,或者说参数个数)不超过 6 个等等。这些 lint 的约束,会强迫你在函数的实现细节层面,考虑地更好。大部分情况下,同一个功能的代码可以有不同的表述方式,linter 的目的就是建立约束,强迫你用更合理的方式去表达一个功能点。

比如我常常不经意写出的代码:

如何提高代码质量?

这样降低了代码的 complexity,提高了代码的 clarity,同时,还使得代码的 extensibility 大大提升 —— 以后要加一个 “type 3” 的处理,仅仅是加一个简单的函数而已,非常符合 open/close 原则。