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

摘要:仁者见仁智者见智,编码风格的不同,对项目也会有不同的影响,统一的编码规范有益于项目的维护。俗话说,没有规矩不成方圆,在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过程,新技术推动云计算产…

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

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

【老杜】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…

Springsecurity之AuthenticationProvider

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

Postman使用入门

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

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

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

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;这样的话就…

Linux核心总结

文章目录1.首先了解一下linux的目录结构2.linux的基本命令之使用命令开关机3.linux的基本命令之目录管理1.ls—列出目录命令2.cd—切换目录命令3.pwd—查看当前所在目录命令4.mkdir—创建文件夹命令5.rmdir—删除文件夹命令6.cp—复制文件命令7.rm—传说中的删库跑路命令8.mv—…

Java多线程系列---“JUC锁”01之 框架

本章&#xff0c;我们介绍锁的架构&#xff1b;后面的章节将会对它们逐个进行分析介绍。目录如下&#xff1a; 01. Java多线程系列--“JUC锁”01之 框架02. Java多线程系列--“JUC锁”02之 互斥锁ReentrantLock06. Java多线程系列--“JUC锁”03之 Condition条件07. Java多线程系…

IDEA配置jdk (SDK)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 提前安装jdk&#xff0c;配置环境变量 一、配置jdk 1、依次点开File -->Project Structure&#xff0c;点击左侧标签页&#xff0c…

Spring Data JPA入门

见&#xff1a;http://sishuok.com/forum/blogPost/list/7000.html Spring Data是什么 Spring Data是一个用于简化数据库访问&#xff0c;并支持云服务的开源框架。其主要目标是使得对数据的访问变得方便快捷&#xff0c;并支持map-reduce框架和云计算数据服务。 Spring Data…

【git】----- clone 及上传文件

在GitHub上创建一个项目首先点击新存储库进入创建的步骤创建完成后跳转到下一个页面复制路径然后在自己的新建的文件夹里面&#xff08;例如:git&#xff09;右键&#xff0c;点击Git Bash Here进入命令行输入 git clone 输入刚刚拷贝的路径&#xff08;https://github.com/nam…

数据结构与算法总结

文章目录线性数据结构1. 数组2. 链表2.1. 链表简介2.2. 链表分类2.2.1. 单链表2.2.2. 循环链表2.2.3. 双向链表2.2.4. 双向循环链表2.3. 应用场景2.4. 数组 vs 链表3. 栈3.1. 栈简介3.2. 栈的常见应用常见应用场景3.2.1. 实现浏览器的回退和前进功能3.2.2. 检查符号是否成对出现…

Hadoop基础-Hdfs各个组件的运行原理介绍

Hadoop基础-Hdfs各个组件的运行原理介绍 作者&#xff1a;尹正杰 版权声明&#xff1a;原创作品&#xff0c;谢绝转载&#xff01;否则将追究法律责任。 一.NameNode工作原理&#xff08;默认端口号&#xff1a;50070&#xff09; 1>.什么是NameNode NameNode管理文件系统的…

JPA入门例子(采用JPA的hibernate实现版本)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 &#xff08;1&#xff09;、JPA介绍&#xff1a; JPA全称为Java Persistence API &#xff0c;Java持久化API是Sun公司在Java EE 5规范…

IDEA详细配置与使用

文章目录一、IntelliJ IDEA 介绍二、查看安装目录结构三、查看设置目录结构3.1 config目录3.2 system目录四、设置显示常见的视图1.工程界面展示2.如何删除模块3.查看项目配置五、常用配置1.Appearance & Behavior2. Editor - General3. Editor – Font4. Editor – Color …