摘要:仁者见仁智者见智,编码风格的不同,对项目也会有不同的影响,统一的编码规范有益于项目的维护。俗话说,没有规矩不成方圆,在2004年,UNIX创始人之一的Ken Arnold就发表了一篇很幽默文章:Style is Substance,文中强调了编码风格的重要性。

大家是否发现把时间浪费在讨论编码规范的分歧上,事后又觉得那些都是徒劳无功的事情。

每个人都希望有人赞赏他的编码风格。就像多年前的我一样,在那时(相对于今天来说),C语言还是那种拥有多个竞争风格的语言。这里有K&R风格,但从未引起我的兴趣并且当时还有其他需要编译的事情。有些人开发是基于一种美学的编码风格,还有的基于可读性或者其他方面的——采用堂吉诃德式的信仰来编写,if(4==y)的这种风格,可以提高代码的正确性。我个人的编码风格是从那个时候开始的,我拥有一个属于自己的C语言杂志,为了让代码尽可能清晰的打印在杂志上,所以我尽可能多留一些垂直空间并且在操作符号周围多使用一些空格。即使今天,代码打印出来后仍能清晰地阅读。Java代码编写风格也这样。C语言编码风格继承并稍作些调整,但至少对于我来说,打印效果还是非常棒。

在我工作过的许多网站都进行过长期地讨论,怎样才是最好的编码风格?我见过许多开发人员抱怨被迫采用一些规范,使他们的语法和语义被破坏。对于这些规范,甚至多年前,我的感觉就像是一个成年代码保姆。关于这种辩论的核心莫过于可选字符的使用、大括号位置、代码块如何缩进、空白空间的大小、注释格式以及语句声明等。鉴于如此丰富的细节,任何带有偏好的明智组合都不可能提供如此高的竞争性集合。这根本是不值得进行讨论的。

有一个比较重要的问题是,在一个不同理论风格的网站下面,开发人员允许使用彼此最舒服最擅长的编码风格,这样就会导致如下几个问题:首先,有些程序员的编码风格会很奇怪;其次在一个代码库里面可能有多种编码风格,代码很难读尤其当多个人去维护的时候;最后,在代码被维护或者更新的时候,许多开发人员会根据他们的喜好重组代码块。这些会使一些毫无意义的增量在代码里面生成,这样维护起来不仅仅浪费时间,而且会让代码越来越乱,反而增加维护成本。

采用单一的编码风格是网站最佳的解决方案。坚持统一的编码风格是至关重要的,但很少有两个网站或者公司的编码风格是一样的,所以当开发人员加入到新团队以后,还是会浪费一些时间。在我看来,最佳的解决方案是让语言设计者在设计时尽可能地多采用些风格,这种方法可以大大方便阅读和代码编写,语言设计者已经慢慢认识到它的好处。在早期的语言中,例如上面提到的C语言,但是Fortran却更加疯狂,它甚至在关键字后边都不需要留有空格,这使得各种各样的形式都涌现出来,并且还移交给那些不幸者维护了几十年。

不过在近期,语言已经加强了这方面的要求。Python对代码块有非常严格的缩进风格。谷歌的新兴系统语言Go,对括号的打开有了位置要求:在新行上,它们不可以成为第一个字符。某种意义上来说,Go语言的打开括号已经解决支持K&R这种编程风格。更重要地是,Python开发人员并没有对缩进有所抱怨,就像新兴Go程序员一样,对括号位置没有任何怨言。

这种可接受性表明,开发人员变得更加明智——承认风格一致性所带来的好处以及多样性所浪费的成本。追求这种主题,语言设计者将朝着这种方向走的更远。如今代码库已经越来越大——本周将完成1000万行代码,这绝对不是个非常大的数字——编译后拥有统一的代码风格并且强调可读性和删除那些“喋喋不休”的代码在很久以前就已经解决。作为一个单独的个体来说,我很愿意抛弃我已使用多年的编码风格来满足那些单一的、可读的、可委托方法的代码。

我们真的需要统一的编程规范?相关推荐

  1. 嵌入式编程规范及注意事项

    嵌入式系统已经在各行各业中得到了广泛的应用,随着人们的生活向信息化,智能化的发展,嵌入式技术将彻底融入到我们的生活,在我们的生活当中扮演越来越重要的角色.对于嵌入式系统来讲,嵌入式软件相当于嵌入式系统 ...

  2. 嵌入式C语言编程规范

    前言 代码首先是给人看的,其次才是给机器执行的,因此一般情况下代码的可读性优先于性能,只有确定性能是瓶颈时,才需要主动优化. 可读性高的代码应当是易于理解并且易于实现的,代码越长越难看懂,可能出错的地 ...

  3. C#—— 1.在设备管理系统中,为了统一各种设备的编程规范,需要定义一个设备接口(IDevice),

    1.在设备管理系统中,为了统一各种设备的编程规范,需要定义一个设备接口(IDevice),在该接口中描述了有关设备的启动(Start).停止(Stop).维修(Mainta).工作(Run).检测状态 ...

  4. iOS代码编程规范 根据项目经验汇总

    带出几十位从零开始学iOS的实习生或试用期的开发人员后,觉得真的是千人千面,每个人写的代码都风格迥异,如果没有一个文档规范,每次都和新人进行口头的说教,大概自己是不用敲代码了,所以吃了亏了就开始编写i ...

  5. [转]阿里编程规范(精简版)

    文章目录 1.简介 2.命名: 3.格式规约 4.注释规约 5.OOP规约 6.集合处理 7.控制语句 8.异常 9.日志 10.单元测试 11.工程规约 1.简介 统一规范标准将有助于提高行业编码规 ...

  6. 嵌入式编程规范与原则

    嵌入式编程原则和规范 编程规范 编程原则 编程思想 架构思想 IDA分层思想 函数编写原则 模板示例 编程规范 1.文件名尽可能以模块名命名,统一小写(根据个人风格调整).如led模块led.c.le ...

  7. C语言编程规范 学习笔记

    C语言编程规范 一.代码总体原则 1.清晰 2.简洁 3.选择适合的风格,与代码原有风格保持一致 二.头文件 背景 术语定义 原则 2.1 头文件中适合放置接口的声明,不适合放置实现 原则 2.2 头 ...

  8. Java 编程规范 -- 易错精简版

    Part 1 – 易错点 --  edit by liudeyu,If you have any adivice or suggestion, please participate in the di ...

  9. C语言编程规范学习笔记和总结(附华为编程规范机试参考试题)

    目录 规范说明 一.头文件 原则1.1 头文件中适合放置接口的声明,不适合放置实现. 原则1.2 头文件应当职责单一 原则1.3 头文件应向稳定的方向包含 规则1.1 每一个.c文件应有一个同名.h文 ...

最新文章

  1. 【js】callback时代的变更
  2. python flask 获取 get post 参数
  3. 深度优先搜索 和问题 简单函数递归 “加 还是不加”
  4. 【struts2+hibernate+spring项目实战】统一异常处理(ssh)
  5. JAVA——自定义排序(实现Comparable接口)
  6. 二叉树的最近公共祖先—leetcode236
  7. Marketing Cloud extension field technical name
  8. LeetCode 1441. 用栈操作构建数组
  9. 第 24 章 状态模式
  10. jquery在选择元素的时候,可以写成var div=$(div)
  11. 深入理解C语言内存管理
  12. python文字转语音的五种方式win32com,pyttsx3,百度api,可使用自己的声音
  13. 2022年新冠疫情后上海的电子商务,数字化经济可能的新趋势
  14. MySQL使用存储过程造数据
  15. 音视频同步、网络抖动
  16. EXCEL打开文件密码如何找回
  17. 为什么说EBC是提升企业“数治”水平的最优解
  18. python 爬取种子_Python爬虫框架Scrapy 学习笔记 2 ----- 爬取Mininova网站种子文件信息...
  19. 使用puppeteer启动并最大化显示Chrome浏览器
  20. 如何判断过拟合和欠拟合,解决手段有哪些?

热门文章

  1. 【转】ABP源码分析一:整体项目结构及目录
  2. 【转】SOAR从概念到落地
  3. python settings模块导入不了_python settings 中通过字符串导入模块
  4. 【HRBUST - 1623】Relation(思维模拟,拆解字符串)
  5. 【HDU - 5961】传递(图,思维,暴力,枚举点)
  6. 【POJ - 1947】Rebuilding Roads (树形dp,背包问题,树形背包dp)
  7. 【HDU - 1276】士兵队列训练问题 (报数问题 模拟)
  8. 一发模拟水题但是RE,暑假抽个时间改一改、、
  9. php实现播放直播_PHP直播技术分享(一:实现直播)
  10. linux变量赋值取值,linuxshell编程对变量的赋值