《代码整洁之道》-大师眼中的整洁代码是什么样

京东云开发者
• 阅读 697

几个月前写了一篇文章“如何写出难以维护的代码”,从中能大概了解到不好维护的代码是什么样,有哪些坏味道,那肯定有人会反问,难以维护的代码见的太多了,也知道长什么样,但是对于好维护的代码是什么样的比较模糊,带着这个问题,本人读完了世界软件开发大师马丁的《代码整洁之道》这本书,来了解下大师眼中的整洁代码画像是什么样的,相信能给你带来不一样的理解和感悟。

 《代码整洁之道》-大师眼中的整洁代码是什么样

关于整洁代码,没有明确的定义,有多少程序员就有多少种定义。下面先看下几位大师是如何定义的。

C++语言发明者Bjarne Stroustrup提到:

代码应该优雅高效,代码逻辑应该直截了当,让缺陷难以隐藏尽量减少依赖关系,便于维护;按照某种分层策略完善错误处理,性能调到最优,不会让别人修改的更混乱整洁的代码只做一件事



《面向对象分析与设计》一书作者Grad Booch提到:

整洁的代码简单直接,如同散文一样优美从不隐藏设计者的意图,代码抽象干净利落,控制语句直截了当。



Eclipse战略教父Dave Thomas这么定义:

整洁的代码应可由其他开发者阅读和增补,应当有单元测试和验收测试,使用有意义的命名,只提供一种而非多种做一件事的途径,只有尽量少的依赖关系,而且要明确地定义和提供清晰、尽量少的API。



《修改代码的艺术》一书作者Michael Feathers定义:

整洁代码应该是特别在意代码的人才能写出来的,几乎没有改进的余地,作者各种情况都想到了,如果你想改进它,总会回到原点,总会赞叹写代码的人的专心和认真。



《极限编程实施》作者Ron Jeffries提出整洁代码:

能通过所有测试,没有重复代码,代码能体现设计理念,尽量减少类,方法以及函数。



综合以上几位大师对整洁代码的定义阐述,可以归纳总结一下整洁代码的画像:

1.体现设计理念,这个整洁代码特性在以上大师的定义里面多次提到了,Grady提到整洁代码不会隐藏设计意图,Ron提到整洁代码一看就知道采用了什么样的设计理念。体现设计理念看上去有点虚,但是实际上我认为是最重要的一点,所谓代码即设计,只要能回答代码为什么这么写,就说明你的代码有设计思想在里面,即便一行代码都能体现出设计理念,比如一个有意义的命名也是设计的一种表现。

2.没有重复代码,如果你两处代码相同或者大部分重复,说明代码不够整洁,同时说明代码没有去做好设计。消除重复代码意味着减少类和方法以及相关API。

3.代码只做一件事,很多代码由于想做太多事,目的不明确,意图混乱,结果代码变得很糟糕,代码只做一件事,也称单一职责,这个几乎是很多软件设计里面经常提到的一个警句,这个原则看似很简单,但是实际上执行起来不是那么简单,或者说,一时坚持这个原则很容易,难的是一直坚持这个原则,如果始终能践行这个原则,代码整洁度能达到质的飞跃。

4.代码好阅读,关于阅读,Bjarne用“优雅”来形容,优雅意味着优美雅致,所以在他看来,代码应该优美,给人以愉悦感,Grad也提到代码应该像散文一样优美,让阅读的人看完一段想看下一段,能很明显的展现出解决问题的表达力和张力,阅读者会不停的发出“啊哈,应该这样来处理!”的感叹。反之,如果代码不好阅读,阅读者看完后还需要猜测所表达的意思,对所实现的功能持怀疑态度,甚至有心惊胆战的心理,会在心里不停的反问:"不会吧,这都可以在线上运行?”我们在修改代码或写新代码之前都要阅读周边代码,如果阅读代码很难,则写代码也会很难,据统计读代码和写代码时间比例是10:1,编写代码的难度,取决于读周边代码的难度。要想干得快,要想早点做完,要想轻松写代码,先让代码易读吧。

5.代码好修改,Dave提到整洁代码应该可以让其他开发者进行增补,也就是很容易进行功能的增加,毕竟很多系统代码都要不停的迭代更新,需要基于原代码进行增补,所以代码的易修改就显得格外的重要,试想如果一个开发者写的代码别人没法修改或者不敢改,那你说这隐患有多大。我们经常嘴巴提到的系统可维护性,实际上说的更具体点,更多的指的是代码的可修改方面。



将以上5点整洁代码的画像总结一句话:





体现设计理念,代码不重复,只做一件事,好阅读和修改!

点赞
收藏
评论区
推荐文章
Symbol卢 Symbol卢
3年前
如何让你的代码更优雅
前言你有没有骂过“前任”的代码?你的代码有没有被吐槽过?没有注释,命名随意,没有封装,结构混乱,一个页面几千行。。。。如何写出优雅的代码,让自己不被吐槽,让人羡慕,接下来咱就一起聊聊如何写出优雅的代码,如果大家有更好的写法和经验,欢迎在评论区留言,一起学习什么样的代码是优雅的代码咱先聊聊,什么样的代码是优雅的代码,在我看来,优雅的代码包括以下方面,首先就是代
劳伦斯 劳伦斯
3年前
JavaScript 代码整洁之道
作者:alivebao(https://github.com/alivebao/cleancodejs)
Wesley13 Wesley13
3年前
5分钟带你领略写出优美代码的核心要素(内含 感恩节彩蛋)
【导语】马丁(RobertC.Martin)撰写的《代码整洁之道》(CleanCode)一书中提出了代码质量与其整洁度成正比,干净的代码,既在质量上较为可靠,也为后期维护、升级奠定了良好基础,并由此揭示代码整洁之道。文中讲述了:当你在做CodeReview时,从审查者的言辞平静或是激烈的词语中,可以领略到你写的代码是BadCode还
Stella981 Stella981
3年前
JavaScript 代码整洁之道
代码质量与其整洁度成正比。干净的代码,既在质量上较为可靠,也为后期维护、升级奠定了良好基础。本文并不是代码风格指南,而是关于代码的可读性、复用性、扩展性探讨。我们将从几个方面展开讨论:1.变量2.函数3.对象和数据结构4.类5.SOLID
Stella981 Stella981
3年前
Android注入框架ButterKnife使用解析
!在这里插入图片描述(https://imgblog.csdnimg.cn/20200805134850360.png)Android开发中使用注入框架,可减少findViewById的代码量,也能让我们的代码更加整洁,有许多著名的注入框架比如,ButterKnife,Annotation,XUtils,afinal等,最开始接触的是XUtils
Stella981 Stella981
3年前
JVM探秘3:内存溢出
在Java虚拟机内存区域中,除了程序计数器外,其他几个内存区域都可能会发生OutOfMemoryError,这次通过一些代码来验证虚拟机各个内存区域存储的内容。在实际工作中遇到内存溢出异常时,需要做到能根据异常信息快速判断是哪个内存区域的溢出,知道什么样的代码会导致这些区域内存溢出,并且知道出现内存溢出后如何处理。Java堆溢出Jav
Wesley13 Wesley13
3年前
C程序编程四步走
任何一个C程序代码到生成一个可执行文件都需要四步,分别是预处理Preprocessing,编译Compiling,汇编Assembling和链接Link,这里借助Gcc工具来探究这四步分别做了什么事,起到什么样的作用。本文使用的测试代码是经典入门程序"HelloWorld!"。测试环境为探究预处
代码的艺术-Writing Code Like a Pianist | 京东云技术团队
如何评定一个系统的质量?什么样的系统或者软件可以称之为高质量?本文将从主观和客观的角度,和大家探讨一下,作为程序员,应该如何写出整洁高质量的代码。
ASM字节码操作类库(打开java语言世界通往字节码世界的大门) | 京东云技术团队
前言:授人以鱼不如授人以渔,应用asm的文章有很多,简单demo的也很多,那么ASM都具备哪些能力呢?如何去学习编写ASM代码呢?什么样的情景需要用到ASM呢?让我们带着这些问题阅读这篇文章吧。这里由于篇幅限制做了删减(第六部分TreeApi和CoreAp
京东云开发者 京东云开发者
10个月前
代码的艺术-Writing Code Like a Pianist
前言如何评定一个系统的质量?什么样的系统或者软件可以称之为高质量?可以从三个角度来看,一是架构设计,例如技术选型、分布式系统中的数据一致性考虑等,二是项目管理,无论是敏捷开发还是瀑布式开发,都应当对技术负债进行清理,对代码进行重构等,最后离不开的是代码质量