[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"content-talking-about-code-style":3,"$f2ik9w0e51kea3":21},{"id":4,"type":5,"slug":6,"title":7,"date":8,"category":9,"tags":10,"body_markdown":13,"permalink":14,"excerpt_src":14,"media_type":14,"media_title":14,"media_author":14,"media_url":14,"rating":14,"layout":14,"pv":15,"admin_only":15,"created_at":16,"updated_at":16,"deleted_at":14,"status":17,"html":18,"excerpt":19,"cover":20},131,"article","talking-about-code-style","关于代码风格","2022-08-19 18:00","tech",[11,12],"代码风格","代码规范","\n> 2016年的旧文，之前未发表，时隔6年后整理一下发出来。\n\n如果从我写下第一行代码开始算的话，我写代码的历史大概已经超过20个年头了。这20多年里接触过各种各样的语言，也接触过各种各样的代码风格。当然也见证了很多代码风格引起的撕逼大战。\n\n对于代码风格这种事情上的架，我一般不参与吵的，觉得是一件很无聊的事情。直到今天（2016年）打开微博看到几十条评论，有点蒙圈。\n\n事情的起因是上周我在微博上发了一个条吐槽：\n\n> 最近面试好多人连12345这五行代码的执行顺序都讲不清楚。就算不知道5我也忍了，好多人连1234这四行代码是什么顺序跑的都搞不清楚。现在前端门槛低到这样的程度了么？（为了把它们排到第12345行上，刻意调整了代码格式，请轻拍。）\n\n附上了一段代码：\n\n```javascript\nfor(var i=0;\n\t\ti\u003C3;\n\t\ti++){\n\tsetTimeout(function(){\n\t\tconsole.log(i)\n\t},0)\n}\n```\n\n然后今天收到了一堆吐槽：\n\n- “花括号不换行，烧死”\n- “等号两边不换行，烧死”\n- “逗号右边没加空格，烧死”\n\n在微博上也零碎地做了一些回复，不过还是觉得没有把想说的话说完，于是有了这篇。\n\n\u003C!-- more -->\n\n## 什么是代码风格\n\n具体一点说，代码风格即是代码长成什么样子。哪些因素会决定代码长成什么样子呢？\n\n- 换行符\n- 空行\n- 空格\n- 缩进\n- 分号\n- 括号\n- ...\n\n自然，决定代码长成什么样子的还有很多因素，比如：\n\n- 变量声明在一行还是每行一个\n- 变量声明在函数最前面还是使用的地方\n- 函数声明还是函数表达式\n- 用`if`还是用`switch`\n- 写成三个函数还是一个函数\n- 分模块还是一个文件到底\n- 面向过程还是面向对象\n- ...\n\n虽然这一些因素也会决定代码长成什么样子，但是同时，它们也决定了代码的其它部分，比如结构是否容易理解和维护，性能是否足够好……简单说，这些会决定风格，但决定的并不只是风格。\n\n所以本文的想说的仅限于前面说的那一堆。\n\n## 代码风格的重要性\n\n好的代码风格到底有什么作用呢？为什么如此多人强调代码风格呢？一般可以找到如下答案：\n\n- 避免bug\n- 方便阅读\n- 便于维护\n- 提高代码编写效率\n- 方便团队协作\n\n然而仔细想一想，仅仅靠我们上面所说的“风格”，这些目标似乎都无法达成。所有这些目标都需要同时依赖其它的工程手段或者流程，才有可能达到一部分效果。甚至可以说代码风格对于这些目标来说是不太重要的。\n\n## 我和代码风格的战斗史\n\n一方面，基于上面的怀疑而产生的结论，一方面，也开始接触各种各样的代码风格，有加空格的，有不加空格的，有喜欢加很多空行把代码写松散的，也有一行空行都没有让结构很紧凑的，有tab缩进的，有2空格缩进的，有4空格缩进的，有分号党，有不加分号党的……\n\n这些代码中有很好理解和维护的，也有不太好理解和维护的，但无论如何，都很难得出代码风格与可维护之间有直接关系的结论。如果一定要说的话，只能说：能把代码写得易于理解和维护的，大概率代码风格也是统一的。\n\n基于这样的认知，我开始不拘泥于代码风格的限制，在不同的项目中会使用不同的风格（在同一个项目中还是会使用同一种风格，并使用工具严格约束），心情好时加加空格，心情不好时不加空格。发现这些事情中，除了在没有注释的情况下用于逻辑分段的空行以外，其它的其实对代码编写和阅读几乎没有影响。\n\n但……上面所说都限于个人项目。在团队作战中风格仍然要保持统一，而原因，可能更出乎意料，只是为了让大家的IDE不要乱改代码造成diff困难。\n\n## 小结\n\n代码风格是个严肃的事情，但将它上升到非常高的高度则大可不必。不关注代码风格的不能叫程序员，只关注代码风格的不能叫好的程序员。\n\n> 本来有一节中“除了代码风格，程序员更应该关注什么”，但是2016年没有写，就不再补了。\n",null,0,"2026-08-28 04:37:17","published","\u003Cblockquote>\n\u003Cp>2016年的旧文，之前未发表，时隔6年后整理一下发出来。\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>如果从我写下第一行代码开始算的话，我写代码的历史大概已经超过20个年头了。这20多年里接触过各种各样的语言，也接触过各种各样的代码风格。当然也见证了很多代码风格引起的撕逼大战。\u003C\u002Fp>\n\u003Cp>对于代码风格这种事情上的架，我一般不参与吵的，觉得是一件很无聊的事情。直到今天（2016年）打开微博看到几十条评论，有点蒙圈。\u003C\u002Fp>\n\u003Cp>事情的起因是上周我在微博上发了一个条吐槽：\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>最近面试好多人连12345这五行代码的执行顺序都讲不清楚。就算不知道5我也忍了，好多人连1234这四行代码是什么顺序跑的都搞不清楚。现在前端门槛低到这样的程度了么？（为了把它们排到第12345行上，刻意调整了代码格式，请轻拍。）\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>附上了一段代码：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>for(var i=0;\n\t\ti&lt;3;\n\t\ti++){\n\tsetTimeout(function(){\n\t\tconsole.log(i)\n\t},0)\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>然后今天收到了一堆吐槽：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>“花括号不换行，烧死”\u003C\u002Fli>\n\u003Cli>“等号两边不换行，烧死”\u003C\u002Fli>\n\u003Cli>“逗号右边没加空格，烧死”\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>在微博上也零碎地做了一些回复，不过还是觉得没有把想说的话说完，于是有了这篇。\u003C\u002Fp>\n\u003Ch2>什么是代码风格\u003C\u002Fh2>\n\u003Cp>具体一点说，代码风格即是代码长成什么样子。哪些因素会决定代码长成什么样子呢？\u003C\u002Fp>\n\u003Cul>\n\u003Cli>换行符\u003C\u002Fli>\n\u003Cli>空行\u003C\u002Fli>\n\u003Cli>空格\u003C\u002Fli>\n\u003Cli>缩进\u003C\u002Fli>\n\u003Cli>分号\u003C\u002Fli>\n\u003Cli>括号\u003C\u002Fli>\n\u003Cli>...\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>自然，决定代码长成什么样子的还有很多因素，比如：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>变量声明在一行还是每行一个\u003C\u002Fli>\n\u003Cli>变量声明在函数最前面还是使用的地方\u003C\u002Fli>\n\u003Cli>函数声明还是函数表达式\u003C\u002Fli>\n\u003Cli>用\u003Ccode>if\u003C\u002Fcode>还是用\u003Ccode>switch\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>写成三个函数还是一个函数\u003C\u002Fli>\n\u003Cli>分模块还是一个文件到底\u003C\u002Fli>\n\u003Cli>面向过程还是面向对象\u003C\u002Fli>\n\u003Cli>...\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>虽然这一些因素也会决定代码长成什么样子，但是同时，它们也决定了代码的其它部分，比如结构是否容易理解和维护，性能是否足够好……简单说，这些会决定风格，但决定的并不只是风格。\u003C\u002Fp>\n\u003Cp>所以本文的想说的仅限于前面说的那一堆。\u003C\u002Fp>\n\u003Ch2>代码风格的重要性\u003C\u002Fh2>\n\u003Cp>好的代码风格到底有什么作用呢？为什么如此多人强调代码风格呢？一般可以找到如下答案：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>避免bug\u003C\u002Fli>\n\u003Cli>方便阅读\u003C\u002Fli>\n\u003Cli>便于维护\u003C\u002Fli>\n\u003Cli>提高代码编写效率\u003C\u002Fli>\n\u003Cli>方便团队协作\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>然而仔细想一想，仅仅靠我们上面所说的“风格”，这些目标似乎都无法达成。所有这些目标都需要同时依赖其它的工程手段或者流程，才有可能达到一部分效果。甚至可以说代码风格对于这些目标来说是不太重要的。\u003C\u002Fp>\n\u003Ch2>我和代码风格的战斗史\u003C\u002Fh2>\n\u003Cp>一方面，基于上面的怀疑而产生的结论，一方面，也开始接触各种各样的代码风格，有加空格的，有不加空格的，有喜欢加很多空行把代码写松散的，也有一行空行都没有让结构很紧凑的，有tab缩进的，有2空格缩进的，有4空格缩进的，有分号党，有不加分号党的……\u003C\u002Fp>\n\u003Cp>这些代码中有很好理解和维护的，也有不太好理解和维护的，但无论如何，都很难得出代码风格与可维护之间有直接关系的结论。如果一定要说的话，只能说：能把代码写得易于理解和维护的，大概率代码风格也是统一的。\u003C\u002Fp>\n\u003Cp>基于这样的认知，我开始不拘泥于代码风格的限制，在不同的项目中会使用不同的风格（在同一个项目中还是会使用同一种风格，并使用工具严格约束），心情好时加加空格，心情不好时不加空格。发现这些事情中，除了在没有注释的情况下用于逻辑分段的空行以外，其它的其实对代码编写和阅读几乎没有影响。\u003C\u002Fp>\n\u003Cp>但……上面所说都限于个人项目。在团队作战中风格仍然要保持统一，而原因，可能更出乎意料，只是为了让大家的IDE不要乱改代码造成diff困难。\u003C\u002Fp>\n\u003Ch2>小结\u003C\u002Fh2>\n\u003Cp>代码风格是个严肃的事情，但将它上升到非常高的高度则大可不必。不关注代码风格的不能叫程序员，只关注代码风格的不能叫好的程序员。\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>本来有一节中“除了代码风格，程序员更应该关注什么”，但是2016年没有写，就不再补了。\u003C\u002Fp>\n\u003C\u002Fblockquote>\n","\u003Cblockquote>\n\u003Cp>2016年的旧文，之前未发表，时隔6年后整理一下发出来。\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>如果从我写下第一行代码开始算的话，我写代码的历史大概已经超过20个年头了。这20多年里接触过各种各样的语言，也接触过各种各样的代码风格。当然也见证了很多代码风格引起的撕逼大战。\u003C\u002Fp>\n\u003Cp>对于代码风格这种事情上的架，我一般不参与吵的，觉得是一件很无聊的事情。直到今天（2016年）打开微博看到几十条评论，有点蒙圈。\u003C\u002Fp>\n\u003Cp>事情的起因是上周我在微博上发了一个条吐槽：\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>最近面试好多人连12345这五行代码的执行顺序都讲不清楚。就算不知道5我也忍了，好多人连1234这四行代码是什么顺序跑的都搞不清楚。现在前端门槛低到这样的程度了么？（为了把它们排到第12345行上，刻意调整了代码格式，请轻拍。）\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>附上了一段代码：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>for(var i=0;\n\t\ti&lt;3;\n\t\ti++){\n\tsetTimeout(function(){\n\t\tconsole.log(i)\n\t},0)\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>然后今天收到了一堆吐槽：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>“花括号不换行，烧死”\u003C\u002Fli>\n\u003Cli>“等号两边不换行，烧死”\u003C\u002Fli>\n\u003Cli>“逗号右边没加空格，烧死”\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>在微博上也零碎地做了一些回复，不过还是觉得没有把想说的话说完，于是有了这篇。\u003C\u002Fp>\n","",{"total":15,"totalRoots":15,"comments":22,"pv":15},[]]