关于代码风格
2022年8月19日
2016年的旧文,之前未发表,时隔6年后整理一下发出来。
如果从我写下第一行代码开始算的话,我写代码的历史大概已经超过20个年头了。这20多年里接触过各种各样的语言,也接触过各种各样的代码风格。当然也见证了很多代码风格引起的撕逼大战。
对于代码风格这种事情上的架,我一般不参与吵的,觉得是一件很无聊的事情。直到今天(2016年)打开微博看到几十条评论,有点蒙圈。
事情的起因是上周我在微博上发了一个条吐槽:
最近面试好多人连12345这五行代码的执行顺序都讲不清楚。就算不知道5我也忍了,好多人连1234这四行代码是什么顺序跑的都搞不清楚。现在前端门槛低到这样的程度了么?(为了把它们排到第12345行上,刻意调整了代码格式,请轻拍。)
附上了一段代码:
for(var i=0;
i<3;
i++){
setTimeout(function(){
console.log(i)
},0)
}
for(var i=0;
i<3;
i++){
setTimeout(function(){
console.log(i)
},0)
}
然后今天收到了一堆吐槽:
- “花括号不换行,烧死”
- “等号两边不换行,烧死”
- “逗号右边没加空格,烧死”
在微博上也零碎地做了一些回复,不过还是觉得没有把想说的话说完,于是有了这篇。
什么是代码风格
具体一点说,代码风格即是代码长成什么样子。哪些因素会决定代码长成什么样子呢?
- 换行符
- 空行
- 空格
- 缩进
- 分号
- 括号
- ...
自然,决定代码长成什么样子的还有很多因素,比如:
- 变量声明在一行还是每行一个
- 变量声明在函数最前面还是使用的地方
- 函数声明还是函数表达式
- 用
if
还是用switch
- 写成三个函数还是一个函数
- 分模块还是一个文件到底
- 面向过程还是面向对象
- ...
虽然这一些因素也会决定代码长成什么样子,但是同时,它们也决定了代码的其它部分,比如结构是否容易理解和维护,性能是否足够好……简单说,这些会决定风格,但决定的并不只是风格。
所以本文的想说的仅限于前面说的那一堆。
代码风格的重要性
好的代码风格到底有什么作用呢?为什么如此多人强调代码风格呢?一般可以找到如下答案:
- 避免bug
- 方便阅读
- 便于维护
- 提高代码编写效率
- 方便团队协作
然而仔细想一想,仅仅靠我们上面所说的“风格”,这些目标似乎都无法达成。所有这些目标都需要同时依赖其它的工程手段或者流程,才有可能达到一部分效果。甚至可以说代码风格对于这些目标来说是不太重要的。
我和代码风格的战斗史
一方面,基于上面的怀疑而产生的结论,一方面,也开始接触各种各样的代码风格,有加空格的,有不加空格的,有喜欢加很多空行把代码写松散的,也有一行空行都没有让结构很紧凑的,有tab缩进的,有2空格缩进的,有4空格缩进的,有分号党,有不加分号党的……
这些代码中有很好理解和维护的,也有不太好理解和维护的,但无论如何,都很难得出代码风格与可维护之间有直接关系的结论。如果一定要说的话,只能说:能把代码写得易于理解和维护的,大概率代码风格也是统一的。
基于这样的认知,我开始不拘泥于代码风格的限制,在不同的项目中会使用不同的风格(在同一个项目中还是会使用同一种风格,并使用工具严格约束),心情好时加加空格,心情不好时不加空格。发现这些事情中,除了在没有注释的情况下用于逻辑分段的空行以外,其它的其实对代码编写和阅读几乎没有影响。
但……上面所说都限于个人项目。在团队作战中风格仍然要保持统一,而原因,可能更出乎意料,只是为了让大家的IDE不要乱改代码造成diff困难。
小结
代码风格是个严肃的事情,但将它上升到非常高的高度则大可不必。不关注代码风格的不能叫程序员,只关注代码风格的不能叫好的程序员。
本来有一节中“除了代码风格,程序员更应该关注什么”,但是2016年没有写,就不再补了。