相关阅读:

300本计算机编程的经典书籍下载

重磅!苹果正式开源iOS内核源码!

互联网技术(java框架、分布式、集群)干货视频大全,不看后悔!(免费下载)

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

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

[  代码量  ]

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

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

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

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

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


[  注释  ]

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

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

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

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


[  命名  ]

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

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

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


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

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

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

[  函数  ]


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

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

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

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

看完本文有收获?请转发分享给更多人


欢迎关注“互联网架构师”,我们分享最有价值的互联网技术干货文章,助力您成为有思想的全栈架构师,我们只聊互联网、只聊架构,不聊其他!打造最有价值的架构师圈子和社区。

本公众号覆盖中国主要首席架构师、高级架构师、CTO、技术总监、技术负责人等人 群。分享最有价值的架构思想和内容。打造中国互联网圈最有价值的架构师圈子。

  • 长按下方的二维码可以快速关注我们

  • 如想加群讨论学习,请点击右下角的“加群学习”菜单入群

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

  1. 优秀的代码 vs. 糟糕的代码

    http://harttle.com/2015/04/13/elegant-and-bad.html 可持续开发不仅在于项目架构设计,还与代码质量密切相关,代码的整洁度和质量成正比.-- Robert ...

  2. 一般程序员 vs 优秀程序员,没有对比就没有伤害

    1. 对需求更加谨慎 优秀程序员:在有需求与任务时,会不断的询问需求与任务,并且多次确认想要的结果,再动手写代码. 一般程序员:接到任务就闷头写代码,反正做错了也是你们要求的,不是我的锅. 2. 编码 ...

  3. 【正一专栏】没有对比就没有伤害-恒大亚冠赛有感

    没有对比就没有伤害 恒大的亚冠比赛,完整地看完了,恒大在上半场占据绝对优势,围着对方球门狂轰乱炸,取得了一粒进球可又浪费了好多机会:下半场风水轮流转,川崎前锋利用恒大体能下降掌握了场上的主动权,比赛的 ...

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

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

  5. 无码系列5.1 代码重构 消除重复代码

    1 前言 本文可以视为对ThoughtWorks高级顾问yuanyingjie关于"正交四原则"策略"消除重复"的"个人解读". 如有谬误, ...

  6. 惊艳于红警开源代码?赏心悦目的代码注释,我们也可以 !

    文章目录 1.前言 2. 我们惊叹它的什么? 2.1 清晰的代码注释 2.2 语义化的编码规范 2.3 小而精的逻辑实现 3. 依葫芦画瓢 3.1 添加文档级注释 3.2 添加类级注释 3.3 添加方 ...

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

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

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

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

  9. 什么才是好代码、高质量代码?

    虽然刚毕业的同学对于代码质量都很用心,但最终呈现出来的质量仍然没能达到"十分优秀"的程度. 究其原因,主要是不了解好的代码"应该"是什么样的. 什么是好代码 写 ...

  10. [系统安全] 三十一.恶意代码检测(1)恶意代码攻击溯源及恶意样本分析

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

最新文章

  1. STM32 中malloc实际调用
  2. [unreal4入门系列之九] UE4创建空白关卡并添加碰撞体
  3. Charpter 8:Declarative Middleware Using AOP:expert one-on-one J2EE Development without EJB.(读后感)...
  4. 01.java内存模型
  5. django+celery+rabitmq
  6. C++中 list与vector的区别
  7. [css] 你有没有自己写过一套UI库?说下遇到哪些难点?
  8. UI设计|搭配色彩素材专辑,轻松掌握要点
  9. bzoj2761 [JLOI2011]不重复数字
  10. cds5516舵机控制程序_[电力世界]中的应用程序CDS
  11. JavaScript之路(3)JavaScript的函数
  12. 在ASP.NET 中实现单点登录(利用Cache, 将用户信息保存在服务器缓存中)
  13. 欧拉函数之和(51nod 1239)
  14. DNN深度神经网络、RBM受限玻尔兹曼机、DBN深度置信网络
  15. [TWRP 2.8.4 ] 小米 3W 中文-英文版本 twrp
  16. 分屏如何保持运行状态_如何提升心理素质,在比赛中保持更好的状态
  17. 如何使用fiddler 4进行手机模拟器抓包详细教程
  18. 天天生鲜(Python)Django项目学习资料(视频、源码)
  19. 当前时间加30分钟_“尾盘30分钟”才是黄金时间,判次日涨跌!无半点偏差,字字珠玑...
  20. Windows-Exploit-Suggester

热门文章

  1. JAVA程序员,你读过这些书吗?
  2. Swiper – 经典的移动触摸滑块插件【免费】
  3. Linux软件包管理器
  4. WCF Data Services查询
  5. 计算机网络及标准化组织
  6. 服务器磁盘管理 知识点
  7. 安装wordpress时候报错:Parse error: syntax error, unexpected '.', expecting '' or variable (T_VARIABLE)
  8. Illustrator中文版教程,如何在 Illustrator 中使用自由变换工具?
  9. 苹果mac文本处理软件:FSNotes
  10. indesign教程,如何创建对齐参考线?