我们真的需要统一的编程规范?

摘要:仁者见仁智者见智,编码风格的不同,对项目也会有不同的影响,统一的编码规范有益于项目的维护。俗话说,没有规矩不成方圆,在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万行代码,这绝对不是个非常大的数字——编译后拥有统一的代码风格并且强调可读性删除那些“喋喋不休”的代码在很久以前就已经解决。作为一个单独的个体来说,我很愿意抛弃我已使用多年的编码风格来满足那些单一的、可读的、可委托方法的代码。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/450786.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

百度云重磅发布ABC 3.0 尹世明如何诠释百度云的“新”打法

雷锋网9月4日消息,2018百度云智峰会正式召开,百度总裁张亚勤发表题为《新技术驱动,全面进入Cloud2.0》的演讲并表示,经历了PCClient/Server到MobileCloud 1.0,再到如今的AICloud 2.0过程,新技术推动云计算产…

EcmaScript对象克隆之谜

先谈谈深拷贝 如何在js中获得一个克隆对象,可以说是喜闻乐见的话题了。相信大家都了解引用类型与基本类型,也都知道有种叫做深拷贝的东西,传说深拷贝可以获得一个克隆对象!那么像我这样的萌新自然就去学习了一波,我们能…

开发人员眼中最好的代码编辑器是谁?

摘要:对开发人员来讲,开发工具就好比战场上的“兵器”,不同领域的开发人员他们所使用的“兵器”也不完全相同,本文从友好性、功能性、扩展等多方面总结了最受开发人员欢迎的“兵器”。你最爱的那个在这里吗? 如果我们把…

关于RESTful一些注意事项,接口开发规范

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 最近在研究restful,公司开发要使用,所以自己就去网上找了好些资料,并整理了一套公司开发的接口规范。…

【老杜】MySQL—day01

文章目录day01课堂笔记1、数据库概述及数据准备1.1、什么是数据库1.2、什么是数据库管理系统1.3、SQL概述1.4、安装MySQL数据库管理系统。1.4、MySQL数据库的完美卸载!1.5、MySQL的服务1.6、用命令来启动和关闭mysql服务1.7、登录mysql数据库2、MySQL常用命令&#…

【转载】DRuid 大数据分析之查询

转载自http://yangyangmyself.iteye.com/blog/23217591、Druid 查询概述上一节完成数据导入后,接下来讲讲Druid如何查询及统计分析导入的数据。Druid的查询是使用REST风格的HTTP请求查询服务节点(Broker、Historical、Realtime),这…

记录 Parameter with that position [1] did not exist; nested exception is java.lang.IllegalArgumentExce

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 报错如题: Parameter with that position [1] did not exist; nested exception is java.lang.IllegalArgumentException: Pa…

[转]简单的动态修改RDLC报表页边距和列宽的方法

本文转自:http://star704983.blog.163.com/blog/static/136661264201161604413204/ 1.修改页边距 XmlDocument XMLDoc new XmlDocument();XMLDoc.Load(System.Windows.Forms.Application.StartupPath "\Report_try-2.rdlc");XmlNamespaceManager xmn n…

函数式编程语言天生就慢吗?

摘要:近期,函数式编程得到了越来越多的关注,Lisp不仅重获青春还涌现出了一批新函数式编程语言。因此开发者们对函数式编程语言的运行快慢各抒己见,展开激烈讨论。本文将和大家一起讨论,函数式编程语言真的就慢吗&#…

【老杜】MySQL—day02

文章目录day02课堂笔记1、把查询结果去除重复记录【distinct】10、连接查询10.1、什么是连接查询?10.2、连接查询的分类?10.3、当两张表进行连接查询时,没有任何条件的限制会发生什么现象?10.4、怎么避免笛卡尔积现象?…

vue根据数组对象中某个唯一标识去重

由于在vue中,会自动在数组和对象中加入_obser__观察者模式的一些属性,所以直接用数组的filter去重(下面这种),indexOf不能准确识别 var arr [1, 2, 2, 3, 4, 5, 5, 6, 7, 7]; var arr2 arr.filter(function(x, index…

Springsecurity之AuthenticationProvider

2019独角兽企业重金招聘Python工程师标准>>> 注意:AuthenticationProvider与Authentication紧密联系,关于Authentication,看我的这篇博客。 先上一张图,如下图1 图1 AuthenticationProvider的类图 AuthenticationProvi…

Postman使用入门

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 Postman测试管理的单位是测试集(Collections),测试集内可以创建文件夹(Folder)和具体的请求(Requests…

编程需要知道多少数学知识?

摘要:许多人认为在开始学习编程之前必须对数学很在行或者数学分数很高。但一个人为了编程的话,需要学习多少数学呢? 实际上不需要很多 。这篇文章中我会深入探讨编程中所需要的数学知识。 下面是我在reddit的子论坛 r/learnprogramming 看到的…

HDU 6071 Lazy Running

链接HDU 6071 Lazy Running 给出四个点1,2,3,4,1和2,2和3,3和4,4和1之间有路相连,现在从2点出发,最后回到2点,要求路径大于等于\(K\),问路径长度最…

vue弹窗插件实战

vue做移动端经常碰到弹窗的需求, 这里写一个功能简单的vue弹窗 popup.vue <template><div class"popup-wrapper" v-show"visible" click"hide"><div class"popup-text">{{text}}</div></div> </temp…

【狂神说】Redis笔记

文章目录1、Nosql概述1.1 为什么要用Nosql1.2 什么是NoSQL1.3 阿里巴巴演进分析2、NoSQL的四大分类3、Redis入门3.1 概述3.2 Windows安装3.3 Linux安装3.4 测试性能3.5 基础的知识4、五大数据类型4.1 Redis-Key4.2 String&#xff08;字符串&#xff09;4.3 List&#xff08;列…

Postman用法说明

见&#xff1a;http://blog.csdn.net/flowerspring/article/details/52774399 Postman用法简介-Http请求模拟工具 在我们平时开发中&#xff0c;特别是需要与接口打交道时&#xff0c;无论是写接口还是用接口&#xff0c;拿到接口后肯定都得提前测试一下&#xff0c;这样的话就…

位、字,字节与KB的关系?

位&#xff1a;我们常说的bit&#xff0c;位就是传说中提到的计算机中的最小数据单位&#xff1a;说白了就是0或者1&#xff1b;计算机内存中的存储都是01这两个东西。 字节&#xff1a;英文单词&#xff1a;&#xff08;byte&#xff09;&#xff0c;byte是存储空间的基本计量…