http://harttle.com/2015/04/13/elegant-and-bad.html

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

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

代码量

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

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

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

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

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

注释

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

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

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

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

命名

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

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

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

冗余

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

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

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

函数

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

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

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

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

优秀的代码 vs. 糟糕的代码相关推荐

  1. 这么糟糕的代码,真的是我以前写的吗?

    GitChat 作者:Zm 原文:日常开发与设计模式的那点事 关注微信公众号:「GitChat 技术杂谈」 一本正经的讲技术 前言 "很多程序员不知道怎么组织代码.怎么提升效率.怎么提高代码 ...

  2. 怎样处理糟糕的代码?

    在职业生涯中,程序员难免会遇到糟糕的代码(bad code)--但是你并不需要成为一个打败这些糟糕代码的"恶人". 从轻松的角度来讲,糟糕的代码可以创造大量的就业机会.比如: 需要 ...

  3. 五种糟糕的代码实践,程序员注意避坑

    本文将向你展示五种糟糕的代码实践,它们足以让所有程序员深恶痛绝. 1将变量命名变成解谜游戏 图译:parseDBMXML 代指什么:A.解析 DBM XML .B.解析 DB MXML.C.解析 DB ...

  4. 这五种糟糕的代码实践,程序员要学会规避

    点击上方"程序猿技术大咖",关注并选择"设为星标" 回复"加群"获取入群讨论资格! 作者丨Marcin Gajda 译者丨马可薇 策划 | ...

  5. [转]为什么程序员总是写糟糕的代码?这3个原因

    原文请看:为什么程序员总是写糟糕的代码?这3个原因 我最近一直在想我们作为一个行业为什么总是产出糟糕代码的原因. 1.明显原因-- 我一下子想到的最明显的原因是,有好的程序员,也有不那么好的程序员,有 ...

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

    点击上方蓝字关注公众号 码个蛋第274次推文 看看大神们怎么说 作者:风铃无声江舟听雨 博客:https://www.jianshu.com/u/b525437c0777 有多少程序员,就有多少定义. ...

  7. python猜数字代码_python猜数代码

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 本文实例为大家分享了python实现猜数游戏的具体代码,供大家参考,具体内容如下 ...

  8. Lombok!代码简洁神器还是代码“亚健康”元凶?

    以下文章来源方志朋的博客,回复"666"获面试宝典 关于Lombok,DD是一个重度用户,从我编写的Spring Boot教程还是Spring Cloud教程中,都可以看到几乎每个 ...

  9. 天天写业务代码?写业务代码中的成长机会!

    写业务代码有成长机会吗?关于这个问题,答案非常肯定:必须有成长机会.对于大部分公司而言,能够写底层代码或者中间件代码的人总是有限的,写业务代码会面临更高的复杂度. 这里分三个层次来看其中的成长机会. ...

最新文章

  1. 计算机科学经典论文(zz)
  2. camera理论基础和工作原理【转】
  3. [译]解密Airbnb的数据科学部门如何使用R语言
  4. 今年美国广告程序化购买支出将超252亿美元
  5. centos7 xampp启动mysql数据库_mysql主从配置,用win xampp和centos7环境下测试
  6. PHP Token(令牌)设计
  7. 自建比赛服务器,《三国杀》怎么自己创建比赛?自建赛事规则介绍
  8. 做一个vue的todolist列表
  9. cloud源码-Ribbon
  10. Linux平台下裸设备的绑定:
  11. android Broadcast广播消息代码实现
  12. spring - ioc和aop
  13. a标签增加onclick事件提示未定义function
  14. 自学-Linux-老男孩Linux77期-day5
  15. 网络监控解决方案及拓扑图
  16. java基础简答题1
  17. MySQL之查询关键字
  18. Jzoj5444【NOIP2017提高A组冲刺11.2】救赎
  19. JAVA基础——对象与引用概念(转载)
  20. mah和mwh的关系?

热门文章

  1. 分享给某人的前端面试题库(一)
  2. 实验六——PE病毒分析
  3. 用NSDateFormatter转换日期,得到大写字母的星期(SUN etc.)
  4. 2030年全球工业物联网总投资将达60万亿美元
  5. .NET中 ,CTS、CLS和CLR分别作何解释?
  6. FLASH WEB GAME的前端架构与人事分工
  7. 如何快速录制电脑屏幕?教您一键录屏的3种方法!
  8. 《那些年啊,那些事——一个程序员的奋斗史》——32
  9. python爬虫练习1:通过python爬取糗事百科的搞笑图片
  10. 可能遇到假的面试题:不用call和apply方法模拟实现ES5的bind方法