浅谈Clean Code

浅谈Clean Code

Clean Code起源

  • 谈起Clean Code,大多数的程序员都不陌生,有时我们会将Clean Code也称之为代码整洁之道。
  • Clean Code的思源源于软件工程领域的大师级人物 - 罗伯特·马丁(Robert C. Martin)所著的一本重量级经典图书《Clean Code》,他在书中提出一种观念:
  • 代码质量与其整洁度成正比
  • 干净的代码,既在质量上较为可靠,也为后期维护、升级奠定了良好的基础。
  • 为了更好地理解这一思想,让我们来先看这样一个研究:
  • 写代码的时间(Writing) VS. 读代码的时间(Reading)
  • 大家可以回顾一下,在日常编写代码的过程中,有多少时间是花费在写代码上?有多少时间是花费在读已有的代码上的?
  • 其实这样一个研究并不难,通过一些编辑器的记录功能,可以很好地分析程序员的整个开发过程。
  • 这个过程往往是这个样子的 -
  • 你经常先会写若干行代码,然而不一会,你又会删除它们;接下来你会滑动鼠标滚轮,研究一会代码的上下文,然后重新写下几行代码;在编写的过程中,有时又会突然想到,编写的这段代码可能又会被sub-class中的方法重写而被覆盖掉,因为你不得不悻悻地删除刚刚编写的代码。。。
  • 相信在编码过程中,类似的场景任何一个程序员都不会陌生,我们总是会在不断地写代码,同时又会不断地使用delete键删除刚刚写好的代码。
  • 研究表明,程序员花费在读代码上的时间通常要10倍于真正编写代码上的时间,也即Writing vs. Reading的比例大概是1:10。
  • 因此可见,如若想持续保证开发团队的效率,那么确保程序代码一以贯之的整洁,干净,易读,易维护是非常重要的。
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uA7TVwdV-1688779267345)(C:\Users\quyanliang\AppData\Roaming\Typora\typora-user-images\1688779094385.png)]

什么是Clean Code

  • 在谈Clean Code的一般原则之前,让我们看看大神们是如何理解这一概念的:
  • “Clean code does one thing well.” — Bjarne Stroustrup (Inventor of C++)
  • “Clean code is simple and direct. Clean code reads like well-written prose.” — Grady Booch (Pioneer of OO and UML)
  • “Clean code can be read, and enhanced by a developer other than its original author.” — Dave Thomas (Godfather of the Eclipse Strategy)
  • “Clean code always looks like it was written by someone who cares.” — Michael Feathers(Author of “Working effectively with legacy code”)
  • 从上面的描述中,不难看出大家对Clean Code这一思想的喜爱,如果稍微文艺点,我们可以说“Clean Code就是心怀爱意地去编程”,让你的程序单纯、简单、美好,当他人读你的程序时,能感觉到“你对这个世界的善意”。
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CnYlyYrf-1688779267346)(C:\Users\quyanliang\AppData\Roaming\Typora\typora-user-images\1688779133845.png)]

Clean Code的一般性原则

  • Clean Code是一种编程思想,涵盖了很多的方面,本文提取了一些通用的原则供各位参考。

命名

  • 变量命名:变量名要能揭示变量的功能和含义。
  • 类名和方法名:类名通常要是名词,方法名使用动词,属性名使用名词。
  • 避免含糊不清的命名:例如Company,CompanyData, CompanyInfo,类似的命名让人无法从名称上明白变量间的差别与含义。
  • 避免含义不清的词汇:例如utility,processer, helper,这样的词所描述的方法或class往往会变成一个杂货铺。
  • 对于某一概念,选取一个特定的词:例如对于读取这一个概念,我们统一口径使用GET,例如get_name(), get_production_date();而不要变成千人千面,例如get_name(), fetch_production_date(),read_customer()。
  • 名字要是可读的:不要使用那些奇奇怪怪的缩写词,例如get_khzsu( )这样的命名会让读你代码的人不断内心WTK…
  • 使用常量,不要留下魔法数字/字符:魔法数字和字符会让读你程序的人崩溃的。。。
  • 通用的命名规范:无论是使用Java, JS, C++, C# etc,在你的团队中一定要有明确的命格规范,并严格遵守。

注释

  • 如果可以用命名来表明含义,则不要用注释;
  • 如果可以用清晰的代码逻辑来表明含义,则无需冗余的注释;
  • 使用Git等工具进行版本管理的标明,而非在程序中通过注释来区分版本;
  • 注释要是清晰明确的,不要写含糊不清的注释;
  • 不要用注释区分段落,如果你的代码过长,考虑进行进一步的封装;
  • 如果你的代码无法做到自我解释,那么留下一个注释,则会是一个明智的选择。

函数

  • 一个函数/方法只做一件事
  • 函数的参数要尽可能地少
  • 函数体不要过长
  • 函数逻辑不要有多层的循环
  • 函数逻辑要避免多层的分支嵌套
  • 使用异常,避免使用error Codes作为返回参数

检查

  • 对代码做静态语法检查
  • 每一段代码都要有对应的单元测试代码
  • 团队内部的pair programming
  • release前,做代码review

小结

  • Clean Code是一种编程的思想和习惯,慢慢改变free style的编程风格,让你的code变得对着世界充满善意,这也将会是一个不断学习积累、不断规范的过程,对于个人而言,它会让你变得更加“专业”且富有“工匠精神”;对团队而言,形成Clean Code的氛围和规范能很好地保证产品质量,并极大提升团队的运行效率。
  • Clean Code是一个“不积跬步无以至千里”的过程。每天都变得规范一点点,做增量的积累,量变就会引发质变。
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MXCCSZun-1688779267347)(C:\Users\quyanliang\AppData\Roaming\Typora\typora-user-images\1688779251542.png)]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT枫斗者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值