浅谈Clean Code

1. 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

因此可见,如若想持续保证开发团队的效率,那么确保程序代码一以贯之的整洁,干净,易读,易维护是非常重要的。

2. 什么是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就是心怀爱意地去编程”,让你的程序单纯、简单、美好,当他人读你的程序时,能感觉到“你对这个世界的善意”。

3. Clean Code的一般性原则

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

3.1 命名

变量命名:变量名要能揭示变量的功能和含义。

类名和方法名:类名通常要是名词,方法名使用动词,属性名使用名词。

避免含糊不清的命名:例如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,在你的团队中一定要有明确的命格规范,并严格遵守。

3.2 注释

如果可以用命名来表明含义,则不要用注释;

如果可以用清晰的代码逻辑来表明含义,则无需冗余的注释;

使用Git等工具进行版本管理的标明,而非在程序中通过注释来区分版本;

注释要是清晰明确的,不要写含糊不清的注释;

不要用注释区分段落,如果你的代码过长,考虑进行进一步的封装;

如果你的代码无法做到自我解释,那么留下一个注释,则会是一个明智的选择。

3.3 函数

一个函数/方法只做一件事

函数的参数要尽可能地少

函数体不要过长

函数逻辑不要有多层的循环

函数逻辑要避免多层的分支嵌套

使用异常,避免使用error Codes作为返回参数

3.4 检查

对代码做静态语法检查

每一段代码都要有对应的单元测试代码

团队内部的pair programming

release前,做代码review

4 小结

Clean Code是一种编程的思想和习惯,慢慢改变free style的编程风格,让你的code变得对着世界充满善意,这也将会是一个不断学习积累、不断规范的过程,对于个人而言,它会让你变得更加“专业”且富有“工匠精神”;对团队而言,形成Clean Code的氛围和规范能很好地保证产品质量,并极大提升团队的运行效率。

Clean Code是一个“不积跬步无以至千里”的过程。每天都变得规范一点点,做增量的积累,量变就会引发质变。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

SAP-nkGavin

给作者赏杯咖啡

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

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

打赏作者

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

抵扣说明:

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

余额充值