谈谈编码风格与编码规范

作者:玉伯

 

引子

上一篇文章提到 「习惯与变化」,收到了比较有意思的一些反馈:

我很好奇,如果你的团队中有人以“习惯”的名义打破编码规范会怎样?于我而言,不写四直接写五就是这种感觉,这并不是习惯,而是规范。

还有一封很长的邮件,截取一二:

玉伯哥,我经常会为一些事情纠结,比如创建文件夹的时候会想是首字母大写好看呢还是全小写来保持统一呢(Movie,movie,mytest,MyTest),当写程序注释的时候我会想是写 // this function proves that… 好呢还是 // This function proves that… 我不知道我这种对大小写在意的习惯是一种好习惯还是一种坏习惯……

微博上,一提到编码风格时,往往也会引起腥风血雨,比如

  1. JavaScript 语句后面应该加分号吗?
  2. 缩进应该用 Tab、四空格还是两空格?
  3. 变量应该统一提前声明好还是就近声明?
  4. 变量名应该用驼峰风格还是下划线风格?
  5. 注释应该采用 JSDoc 风格还是 Markdown 风格?
  6. 私有属性约定用下划线开头吗?
  7. 函数最好不要超过多少行?
  8. ……

 

这类问题不仅在程序员中普遍存在,文字工作者也常常纠结:

  1. 中英文混排时,中文与英文之间应该加空格吗?
  2. 中英文混排时,英文字母后面应该用全角还是半角标点符号?
  3. 段落前面真有必要空两格吗?
  4. 引号是否应该用 『』和「」?
  5. 破折号是一杠还是两杠?
  6. 例如、参考等词汇后,究竟需不需要加冒号?

 

 

风格

我们日常说的编码规范,经常指的是 Style Guide,正确的翻译是编码风格。

既然是风格,就没有对错。就如现实生活中,我们每个人都有自己的穿着打扮一样。可能有些人打扮土一点,但土就土,并不影响什么。

很有意思的是,风格也没有孰优孰劣。比如郭敬明的打扮,很多人很喜欢,会为其尖叫为其疯狂。但在我看来,郭敬明的相貌让我非常讨厌,这还是男人吗?太锉啦。

别去争辩,喜欢和对错无关,风格亦无高低之别。

编码风格如此,文字排版风格也是一样。

 

规范

风格之外,也有规范。比如穿着打扮,光怪陆离都没问题,但在公众场合不能不穿。规范经常很少很少,但的的确确存在。

对于 JavaScript 语言来说,通用的编码规范基本没有,有的话只有一条:要能运行。除此之外,还会有一些:

  1. JavaScript 文件的编码必须是 UTF-8 。
  2. JavaScript 中不能出现 URL 硬编码。
  3. ……

以上规范都是针对具体公司具体场景下的要求,除了以上这些规范,其他都是编码风格问题。

社会中的规范,是为了维护基本秩序和道德底线。编码规范,则是为了避免错误。

 

 

态度

程序员经常有个坏习惯:拿到别人的代码,喜欢首先按照自己的风格格式化一下。特别是用 Vim 的程序员,有些 Vim 程序员不光喜欢格式化他人的代码,还会在文件头留下作案凭证。

好的习惯是这样的:

@agentzh: 给他人的开源项目提交补丁也是一样:尽可能多地做足功课,弄清楚该项目使用的代码风格和测试集的组织,甚至是 git 提交日志的书面格式,尽量让我写的东西酷似项目作者本人写出的东西,这样可以节约对方的时间,是对他的最大尊重。

这就如我们去朋友家里做客,你可能会很不喜欢朋友家里的装修风格,但你最好不要自带颜料桶去帮朋友重新装修。道理不用多说,对他人的风格我们要懂得尊重,无论是在现实生活中,还是在写代码时。

当然,认可的规范还是得遵守。比如别在公共场合裸奔,别在一个 UTF-8 团队把文件存成 GBK 编码。

对待规范,要严格遵守。对待风格,要懂得尊重.

 

关键

一旦你拥有了开放的心态,一旦你开始懂得去欣赏他人的风格,你会发现世界是五彩缤纷的,你会开始越过一些表象,关注起一些真正值得关注的。

比如一个长得很丑的人,当你不再去看外表时,你会发现某些情况下丑人是会发光的,那种光十分漂亮,比很多帅哥漂亮百倍千倍。你会开始懂得生活,懂得真爱。

编码也如此。不再去纠结四空格还是两空格后,你会看到

  1. 代码的逻辑抽象是否正确?
  2. 代码背后的数据模型是否可以优化?
  3. 这段代码是否应该放在这个文件里?
  4. 这个模块的职责是否过大?
  5. 这个设计模式是否用得太僵硬?
  6. 某个功能点是否应该用 CSS 而不是 JS 来实现?
  7. 这段代码是否忘了写单元测试?
  8. ……

一旦你开始能从他人的代码中,去纠结以上各种问题而不是代码风格时,你的功力经常就会大增。牛逼的程序员有个不怎么对外说的秘密:

去更多地看代码,看优秀的代码。迫不得已才自己去写少量代码。

 

最后

代码如人,风格的差异很正常,彼此尊重。相爱是灵魂的碰触,别停留在表象。

时间: 2024-12-31 02:55:27

谈谈编码风格与编码规范的相关文章

Linux操作系统内核编码风格

这篇简短的文章描述了Linux内核首选的编码风格.编码风格是很个人化的东西,我不会把自己的观点强加给任何人.但是,Linux内核的代码毕竟是我必须有能力维护的,因此我宁愿它的编码风格是我喜欢的.请至少考虑一下这一点. 首先,我建议打印一份<GNU编码标准>,不要阅读它.烧掉它,它不过是象征性的姿态.然后,请看: 第 1 章: 缩进 Tabs(制表符)是8个字符的大小,因此缩进也应该是8个字符的大小.有些叛逆主张试图把缩进变成4个(甚至是2个!)字符的长度,这就好象试图把PI (案,圆周率)定义

如何养成良好的Linux编码风格

Linux操作系统是一个开源的操作系统,为此你在Linux系统上开发的一个工具软件,包括源代码,可能其他系统管理员也需要用到.为此在编写代码的时候,就需要遵守一定的规则.这不仅是为了方便他人的阅读,也是为了以后自己的维护与升级考虑.具体的来说,笔者认为Linux系统管理员要养成下面的一些好的编码风格. 一. 合理防治函数开头的左花括号. 根据大部分系统管理员认可的编码风格,往往将函数开头的左括号放到代码页的最左边.要避免将其他的括号(包括左花括号.左括号或者左方括号)放到最左边.这主要是为了便于

谈谈关于Android视频编码的那些坑

本文讲的是谈谈关于Android视频编码的那些坑,Android的视频相关的开发,大概一直是整个Android生态,以及Android API中,最为分裂以及兼容性问题最为突出的一部分.摄像头,以及视频编码相关的API,Google一直对这方面的控制力非常差,导致不同厂商对这两个API的实现有不少差异,而且从API的设计来看,一直以来优化也相当有限,甚至有人认为这是"Android上最难用的API之一" 以微信为例,我们录制一个540p的mp4文件,对于Android来说,大体上是遵循

《Linux 高级程序设计(第三版)》——1.4 Linux下编码风格

1.4 Linux下编码风格 Linux 高级程序设计(第三版) 下面为读者列出GNU编码规范和Linux内核编码规范示例. 1.4.1 GNU编码规范 下面是GNU emacs中的一段代码. /* Interface from Emacs to terminfo. Copyright (C) 1985, 1986 Free Software Foundation, Inc. This file is part of GNU Emacs. GNU Emacs is free software;

《Python高手之路(第3版)》——1.4 编码风格与自动检查

1.4 编码风格与自动检查 没错,编码风格是一个不太讨巧的话题,不过这里仍然要聊一下. Python具有其他语言少有的绝佳质量:使用缩进来定义代码块.乍一看,似乎它解决了一个由来已久的"往哪里放大括号?"的问题,然而,它又带来了"如何缩进?"这个新问题. 而Python社区则利用他们的无穷智慧,提出了编写Python代码的PEP 8(http://www. python.org/dev/peps/pep-0008/)标准.这些规范可以归纳成下面的内容. 每个缩进层级

JavaScript编码风格指南(中文版)_javascript技巧

前言: 程序语言的编码风格对于一个长期维护的软件非常重要,特别是在团队协作中.如果一个团队使用统一规范的编码分风格,可以提高团队的协作水平和工作效率.编程风格指南的核心是基本的格式化规则,这些规则决定了如何编写高水准的代码.本指南来自于<编写可维护的JavaScript>这本书,基于"Java语言编码规范"和Crockford的JavaScript编程规范,还有Nicbolas的一些个人经验和喜好.写作本文旨在加深自己印象,也为了更多人的了解到JS编码风格,提高自己的编码质

《Python高手之路》——1.4 编码风格与自动检查

1.4 编码风格与自动检查 没错,编码风格是一个不太讨巧的话题,不过这里仍然要聊一下. Python具有其他语言少有的绝佳质量2:使用缩进来定义代码块.乍一看,似乎它解决了一个由来已久的"往哪里放大括号?"的问题,然而,它又带来了"如何缩进?"这个新问题. 而Python社区则利用他们的无穷智慧,提出了编写Python代码的PEP 8(http://www.python.org/dev/peps/pep-0008/ )标准.这些规范可以归纳成下面的内容. 每个缩进层

Nim编码风格

介绍 Nim语言不限制开发人员使用哪种具体的编码风格, 但为了社区的发展,在编写一些标准库的时候还是应该遵从统一的编码风格 这篇文章会列出一系列的编码风格准则,供大家参考.   但值得注意的是,有很多例外场景会与这些准则相悖, 而且,nim语言非常灵活,在一些特定上下文中,这些编码风格准则也不适用. 跟python相似,python的编码风格在不断演化.改变, nim语言也是这样,随着时间的推移,这个编码风格准则也会改变.   在编写nim的基础类库.编译器.官方工具的时候, 强制要求遵从这些编

XXencode 编码,XX编码介绍、XXencode编码转换原理与算法_其它综合

Xxencode编码,也是一个二进制字符转换为普通打印字符方法.跟UUencode编码原理方法很相似,唯独不同的是可打印字符不同.通个UUencode编码,我们知道它有个缺点就是,64个可打印字符中,有很多的特殊字符.而XXencode编码方法,对64个原字符有做规范.这里它有跟Base64类型了.都有指定可打印字符范围.及编号.Xxencode编码在上世纪后期,IBM大型机中得到很广泛的应用.现在逐渐被Base64编码转换方法所取代了. Xxencode编码原理 XXencode将输入文本以每