阅读更多

0顶
0踩

研发管理

转载新闻 编码风格不是编码规范

2013-07-03 10:53 by 副主编 WnouM 评论(5) 有10384人浏览


我并不认为程序员是一个情绪特别丰富的群体。但有一些事情却能很容易刺激程序员的神经,那就是代码格式和布局。如果看到一个函数的括弧在同一行上没有闭合,我的眼睛会喷血。如果看到有人没有恰好的在两个函数间留一空行,我的小腿会抽筋。但重点在这里——除非是在家里开发自己的业余爱好软件,我的这些个人喜好其实是无关紧要的。同样,作为一个团队中的一员,你的个人编程喜好也应该放到一边。

编码风格很容易会和编码规范混为一谈,因为这两个词经常会被人换着使用。我认为,编码规范同时包括了编码风格和其它规范,不仅仅指代码格式。例如,像“返回成功/失败的函数应该用一个整数作为返回值”,这样的规则不属于编码风格。在这篇文章中,编码风格简单的指一个描述如何格式化代码的说明。编码风格中的规则通常会涉及到下面这些主题:

  • 缩进
  • 空格使用
  • Tab使用
  • 注释
  • 命名习惯
  • 代码行长度
  • 语言特点风格,例如是否使用可有可无的分号
编码风格都是为特定的编程语言制定的,可以把它们看作“我们共同的约定”。如果在你的公司里,在你在时,在这些事情正在制定完成,你可以提出你的喜好,那你是幸运。但通常情况是,一种编码风格在其生命期里看着无数的程序员来了又走了。在我的眼里,遵守编码风格有下面三个主要好处:

1. 遵守编码风格使代码更容易维护

今天由这个程序员实现的软件,明天可能需要另外一个程序员维护。如果所有代码中大家使用同一种编码风格,这另外一个程序员快速的扫一眼陌生的代码,就能根据大家约定的编程习惯,推断出代码的作用。如果编码风格中指明常量应该全用大写字母表示,那么,当看到一个全是大写字母的变量时,你就能推断出它是常量。同样的,如果编码风格中规定包的引入要有顺序,那你立刻就能知道去哪里找这些包。这使得代码很容易维护。

2. 编码风格使形成代码集体所有制

代码集体所有制意味着全体程序员要负责所有代码。集体所有制的作用很大,它能有效的增大巴士因子——一个项目能承受多少个程序员被车撞了而不影响项目的正常进行。在整个代码库中坚持延用一种常用的编码风格,所以程序员都能更容易的理解、维护。

相反,如果在一个大型的软件项目中,每个程序员都使用自己的编码风格,最终会引起一场维护版图的战争,就像动物世界里我们的这些朋友:

气味记号(也称喷洒尿液或领土记号)是动物标记自己领土范围的一种行为。通常是通过留下具有强烈气味的物质来完成,很多时候是通过在领土中突出的物体上小便。-维基百科

个人编码风格就像是狗撒尿,留下自己的势力记号。他们在代码中留下自己的符号,在程序员之间创造壁垒。

3. 编码风格能消除那些长久的纷争

每个程序员都对编码风格有强烈的自我认同。这种感觉深植于每个人的自负中,每当和同事遇到是否应该在关键词周围使用空格时,这种讨论很容易升级而僵持不下。但是,静下来想想——这真的无所谓。不管是不是在关键词周围使用了空格,只要能达成一致,大家都能从中获得易维护和集体所有制的好处。在这种情况中,闭着眼睛,遵循一种编码风格就行了。

你不需要喜欢这种编码风格。如果你不喜欢里面的某条规定,那就骂几句这个文档,只向文档发脾气,就像人类迁怒于上帝。然后还是按照约定做事。这样做更具有建设性,比无休无止的吵论这些不重要的事情好的多。

有了一套编码风格并不一定会给你带来好处——除非大家都遵守。有些时候,你并不一定需要手工去调整代码。很多的程序编程器,例如Eclipse,能配置帮你格式化代码,使其符合编码风格。即使你的编辑器没有这种功能,很多其它工具也能够自动按照某种风格格式化一个文件。在我们的团队中,我们使用 indentuncrustify 工具。我还听说过一些其它好东西,比如ReSharper。那些不能被自动实施的规则,例如命名习惯,可以在代码审查的过程中落实。

你有什么想法?你们团队中采用了什么标准和约定?它们带来了什么好处?请写在评论里。我会很高兴看到讨论。

英文原文:The conventions we follow / 译:外刊IT评论
来自: 外刊IT评论
0
0
评论 共 5 条 请登录后发表评论
5 楼 mguo163 2013-09-08 23:21
同意
dohkoos 写道
我认为“注释”和“命名习惯”应该是编码规范,而不是风格。

4 楼 dohkoos 2013-07-11 18:44
我认为“注释”和“命名习惯”应该是编码规范,而不是风格。
3 楼 txc_tang 2013-07-03 17:37
说得好! 代码风格统一,对于团队快速协作是一大欣慰之事。一般新进来的成员,我都会要求先看代码结构,命名规范,时间久了就会养成习惯,这样大家维护起来也很轻松。
总之百利无一害。
2 楼 EnterLee 2013-07-03 15:44
cdn_mn_mm 写道
讲得还不错。 但现实中,人员素质真的参差不齐, 让他们遵循大家一起制定出的编码风格就是那么的难

写的很好,很受益。
每个人都有自己的Style,特别是工作经验比较久一点的coder。让大家都遵循统一的代码风格不现实,只要大家都遵循代码制定的代码规范就好了。
1 楼 cdn_mn_mm 2013-07-03 14:33
讲得还不错。 但现实中,人员素质真的参差不齐, 让他们遵循大家一起制定出的编码风格就是那么的难

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • QT编码风格与规范.pdf

    qt 编码规范 风格,学习qt的可以参考一下

  • c++编码规范(华为).rar

    对于从事c++开发的人员来说,规范自己的编码风格,更有利于工作。

  • discuz的编码规范

    本规范由编程原则组成,融合并提炼了开发人员长时间积累下来的成熟经验,意在帮助形成良好一致的编程风格...缺陷是由于每个人的标准不同,所以需要一段时间来适应和改变自己的编码风格,暂时性的降底了工作效率。从使项

  • 谷歌C++编码规范 Google C++ 风格指南

    将Google C++ 风格指南中文版(http://zh-google-styleguide.readthedocs.io/en/latest/google-cpp-styleguide/)整理到一个文件当中,添加了书签以方便定位和阅读,含word版和pdf版,需要的可以下载以减少重复整理...

  • C++编码规范.doc

    简述软件部门C++编码风格/规范/建议

  • 编码规范 注释规范 代码风格 JAVA

    编码规范 注释规范 代码风格 华为 JAVA

  • PEP8Python 编码规范

    PEP8Python 编码规范 将Python 的英文编码变成中文的数据规范

  • 【python技能树】python编码规范

    想要写好python代码,必须了解python相关编码规范,有了这个的加持,编写的代码不仅可以实现相应的功能,而且简单易读,逻辑清晰。本节技能树主要分享相应的python编码规范,学习python的小伙伴们请仔细阅读,对你的...

  • 谷歌C++编码规范中文版

    Google 经常会发布一些开源项目, 意味着会接受来自其他代码贡献者的代码. 但是如果代码贡献者的编程风格与 Google 的不... Google 因此发布了这份自己的编程风格指南, 使所有提交代码的人都能获知 Google 的编程风格.

  • Verilog编码规范.docx

    如果自己的编码风格与本文档的规定实在不同,无法忍受,请与维护者联系,在组内会议上统一讨论解决方案。 此外,如其他人对该编码规范有任何建议和批评,欢迎联系该规范的维护者。维护者的联系方式详见首页的维护...

  • Java编码规范

    为使开发项目中所有的JAVA程序代码的风格保持一致,增加代码的可读性,便于维护及内部交流,使JAVA程序开发人员养成良好的编码习惯,有必要对JAVA程序的代码编码风格做统一的规范约束。本文档定义了我公司软件开发...

  • 看“编码风格不是编码规范”之感

    编码风格不是编码规范,文章中指出:“编码规范同时包含了编程风格和其他规范”。以及“编码风格简单的指一个描述如何格式化代码的说明”。 文章的重点的遵守编码风格有三个好处:1、使代码更易维护;2、使形成代码...

  • 安富莱与正点原子的编码规范

    安富莱编码规范与正点原子编码规范

  • 按照规范书写代码:编码规范集锦

     保持编码风格,注释风格一致,应用设计模式一致  新程序员,通过熟悉你们的编码规范,可以更容易、更快速的掌握你们的程序基础库。  减少代码中bug出现的可能性,因为程序员遇到各种情况时有标准可以简单的...

  • php编码规范

    标准化不是特殊的个人风格,它对本地改良是完全开放的。当一个项目尝试着遵守公用的标准时,会有以下好处:程序员可以了解任何代码,弄清程序的状况新人可以很快的适应环境防止新接触php的人出于节省时间的需要,...

  • R语言编码风格指南

    R语言编码风格指南,R语言编码风格指南,R语言编码风格指南

  • 微软C#编码规范.doc

    微软内部员工写的.net编码规范 本文档描述了微软一站式代码示例库项目组所采纳的关于本地 C++ 和 .NET (C# 和VB.NET)代码的编程风格指导规范 1 概览 1 1.1 原则和主旨 1 1.2 术语 2 2 通用编程规范 3 2.1 明确和...

  • 基于springboot大学生就业信息管理系统源码数据库文档.zip

    基于springboot大学生就业信息管理系统源码数据库文档.zip

  • 基于java的驾校收支管理可视化平台的开题报告.docx

    基于java的驾校收支管理可视化平台的开题报告

Global site tag (gtag.js) - Google Analytics