没有对比就没有伤害,优秀的代码VS糟糕的代码

可持续开发不仅在于项目架构设计,还与代码质量密切相关,代码的整洁度和质量成正比。—— Robert C. Martin, “Clean Code”

如果你还没有发现代码质量的区别,如果你从未见过优秀的代码,或者从未见过糟糕的代码,那么本文将以直观地对比,告诉你代码质量究竟会有多大的区别。

[ 代码量 ]

我们知道代码量显示着功能的复杂程度,例如Windows XP的代码量超过2000万行,Linux内核有1500万行(2012年)。然而代码量和功能数量之间并非线性关系。

优秀的设计中,代码量和功能数的关系是这样的:

糟糕的设计中,代码量和功能数的关系是这样的:

优秀的系统往往会有优秀的结构设计:层次清晰、职责单一、模块化,方便扩展或者复用。功能的添加往往只是在现有框架中添加少量代码。

然而糟糕的设计中,层次混乱、互相耦合、难以阅读,既难以复用又不易扩展。每当被要求添加功能时,不得不几乎完整地实现整个功能的流程,并修复与原系统的所有兼容问题。

[ 注释 ]

优秀的代码中,注释是这样的:

糟糕的代码中,注释是这样的:

最愚蠢的程序员都能写出机器能读懂的代码,而优秀的程序员能写出人可以读懂的代码。

程序的注释是为了让人读得懂。多数优秀的代码中,注释几乎接近代码行数的一半,描述函数功能、解释参数配置、指出陷阱所在。而糟糕的代码中不仅不含这些注释,甚至会保留大量残余代码,可读性差又难以重构。

[ 命名 ]

优秀的代码中,命名是这样的:

糟糕的代码中,命名是这样的:

命名是为了让代码更加容易阅读,使用规范的术语不仅更加易懂,同时也是开发者知识水平和开发经验的表现。如果说以中文拼音命名显得奇怪,那么直接以a, b, c, d命名的便会显得可恨,谁记得你的a是神马东西!

看一个经典的例子,字符串替换:

稍微有点Java常识的便会想到正则表达式:

何必拷贝这一堆的代码给老板看呢?开发中确实有很多时候,直接拷贝代码既能立竿见影地完成功能,又不会影响原有功能。但这样的代码多起来之后,万一功能调整你便需要重新debug所有的副本。花一些时间学习更优雅的用法是值得的。

[ 函数 ]

保持函数的短小,使你的代码更加易读,例如:

将复杂的逻辑分步骤完成。如果写在一起将会是这样的:

相信我,一旦你写了这样的函数,它会随着时间的推移变得越来越长,直到有一天,你也忘了其中的一段代码到底是做什么的。

事实上,复杂的函数不仅可以按照步骤划分,更应按照层次来细化。不要在一个函数中进行不同层次的操作,否则它会变得非常难懂。

本文作者:佚名

来源:51CTO

时间: 2024-08-04 11:16:17

没有对比就没有伤害,优秀的代码VS糟糕的代码的相关文章

没有对比就没有伤害!有一种爸爸叫别人家的爸爸

创造型漫画家奶爸托马斯•罗曼 在东京的法国漫画家托马斯•罗曼有两个儿子,可能是继承了父亲的基因,也喜欢画画,虽然质量还处于涂鸦程度,但没关系,有老爸呢!罗曼平时喜欢把他小儿子日常画的涂鸦小人"改造"进化成超酷的各种角色,真是创意十足. 小孩子虽然创意非常足,但画功稚嫩,画出来的作品,大多都是这样的....典型的小孩子的画作.   经过老爸的改造变成了这样:   还有这样的:   改造后:   这样的:   根本停不下来的节奏啊!   艺术型摄影师奶爸John Wilhelm 你爸给你拍

优秀程序员眼中的整洁代码

有多少程序员,就有多少定义.所以我只询问了一些非常知名且经验丰富的程序员. Bjarne Stroustrup,C++语言发明者,C++ Programming Language(中译版<C++程序设计语言>)一书作者. 我喜欢优雅和高效的代码.代码逻辑应当直截了当,叫缺陷难以隐藏:尽量减少依赖关系,使之便于维护:依据某种分层战略完善错误处理代码:性能调至最优,省得引诱别人做没规矩的优化,搞出一堆混乱来.整洁的代码只做好一件事. Bjarne 用了"优雅"一词.说得好!我

于码农而言什么样的代码才能叫做好代码?

好的代码,就像是好的笑话--无需解释就能让别人明白.如果你的代码能够做到不解自明,在大多数时候,你根本无需为其配备说明文档. 好的代码,就像是一辆配备了优秀音响和杯架的汽车,这辆车在行驶到最高速度的时候,你听不到噪音,也不用担心水会洒出来.在它出现故障的时候,任何一名修理工都可以使用最常见的工具,在最短的时间里轻松将其修好. 而坏的代码,就像是一辆向你承诺最高速度可以达到200MPH,但是音响只能播放老式的磁带,而且杯架还不稳的车.你在调整反光镜角度的时候,汽车都会突然出现故障,而且一般的修理工

利用RTC自带的代码审阅工具进行代码的评审

本文介绍了 IBM Rational Team Concert(RTC)的代码评审功能(Code Review).这一功能可以使代码评审流程变得更加规范,完善代码提交流程:对于不同区域的成员可以更高效的http://www.aliyun.com/zixun/aggregation/18521.html">协同工作,在代码提交前发现到潜在的问题,尽快修复,提高代码质量,有效减少缺陷数. 代码评审的重要性 多数情况下,评审者能够发现开发人员自身不能发现的问题或潜在问题,毕竟思维方式和考虑的点等

如何这段C#代码翻译成VB代码?谢谢!

问题描述 如何这段C#代码翻译成VB代码?谢谢! private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { //自动点击弹出确认或弹出提示 IHTMLDocument2 vDocument = (IHTMLDocument2)webBrowser1.Document.DomDocument; vDocument.parentWindow.execScrip

【前端模板之路】二、人肉非智举,让代码帮我们写代码才是王道

写在前面 在前面一篇文章<[前端模板之路]一.重构的兄弟说:我才不想看你的代码!把HTML给我交出来!>中,我们举了一个人肉各种createElement的例子,那繁琐程度绝对是惨绝人寰.人生本就苦短,每天加班又占据了不少时间,这么折腾下去,还让人怎么活.面对这种场景,我们该怎么做. 无需复杂的构建工具,仅几个简单的工具函数,帮我们告别重复意义的劳动:让代码帮我们写代码! 从最简单的例子说起 让代码帮我们写代码,似乎很豪迈的话,但相信部分童鞋听着还是有些丈二和尚摸不着头脑.那我们暂且抛开这句不

求民航售票系统代码用java+jsp代码 SQLserver数据库myeclipse平台

问题描述 求民航售票系统代码用java+jsp代码 SQLserver数据库myeclipse平台 用于课程设计不用太复杂,只用实现基本功能.1.用户登录2.根据时间,出发地,目的地查询机票功能3.订票4.订单查询5.退票.用java+jsp代码 SQLserver数据库myeclipse平台 解决方案 参考:http://download.csdn.net/download/angelyucc/2373156 解决方案二: 这个可以参考,但最好还是自己写吧 解决方案三: http://down

extjs java-请问使用extjs进行文件上传,extjs前台代码和java后台代码应该怎么写

问题描述 请问使用extjs进行文件上传,extjs前台代码和java后台代码应该怎么写 请问使用extjs进行文件上传,extjs前台代码和java后台代码应该怎么写 解决方案 代码复制一下.http://www.cnblogs.com/hannover/archive/2010/12/02/1894820.htmlhttp://blog.itpub.net/29870867/viewspace-1280697/ 解决方案二: extjs的上传是封装好的,你只需要在后台servlet中接收传过

java-高分,帮忙下,谁知道把PhP代码转成Java代码

问题描述 高分,帮忙下,谁知道把PhP代码转成Java代码 <?php $prize_arr = array( '0' => array('id'=>1,'prize'=>'平板电脑','v'=>3), '1' => array('id'=>2,'prize'=>'数码相机','v'=>5), '2' => array('id'=>3,'prize'=>'音箱设备','v'=>10), '3' => array('id'=