这次的Cleancode的培训,让我很是感慨,原来“道”这个东西真的如古圣先贤所说,无时不有,无处不在。软件编程,这是一个多么现代化的词汇呢,这里面能有道吗?答案是有的。
这次课程的培训,时时处处在围绕着这一点,一开始老师就举了很多个编程大师们的语录,每个大师虽然用不同的表达,但都是在说一件事,都是用自己的理解在阐述着这个道。
那么,什么是道呢?
《实现模式》的作者KENT BECK说编程第一个价值观就是珍视与他人沟通的重要性,GOOGLE公司首席JAVA架构师JOSHUA BLOCH说,编程首先是易于理解,《代码整洁之道》的作者ROBERT MARTIN说,大师级程序员把系统当做故事来讲,而不是当作程序来写。
什么意思呢?总结一下,就是毛主席说的为人民服务,现在叫以人为本。
正是围绕着这个核心:为人民服务,编程才有了“代码整洁之道”的思想和具体技巧。那么具体要为哪些人服务呢?
首先是为所有会阅读我们程序的人服务。不管他是代码维护人员,测试人员,二次开发人员,还是领导,审查人员,学习中的人员,包括自己。要让每一个可能阅读我们代码的人员正确的,顺畅的,没有压力的理解我们的表达,这个就是现代编写代码的目的。老师说,编程首先是为人,然后是为计算机。
围绕着这个目的,我们需要怀有谦卑的心态,为人服务的心态,我们编写的代码必须是易于理解的,简单的。具体操作层面呢:
- 单一抽象层次原则:目录式的表达,用若干个函数来清晰地说明主业务步骤或是逻辑,函数名要描述实现的功能,而不是如何实现。
- 单一职责原则
一个函数一件事
一个循环一件事
一个变量一件事
一行代码一件事
- 短小原则:
代码推荐20行,最多50行。
嵌套最多3层
参数最多5个
变量最多7个
圈复杂度最多10
- l把某些不好理解的代码,或是具体细节的代码,或是复杂的布尔判断的代码,起一个易懂的函数名封装起来,哪怕只有一行代码,哪怕只用一次,有时候一个函数的意义仅仅是为了便于理解。
- 用函数名来消除一些注释,函数名可以长,40个字符以下都可以。
- 函数名不要含有NOT,这样让人更舒服地理解。
- 尽量不用break和continue语句,因为它们容易产生多种理解。
- 不要有空语句或者{},可以创doNothing()的函数来调用,以免引起误会。
- 任何可能会引起多种理解的表达,就换一种表达,目标是让人只有一种可能的理解。
其次呢,是为所有会使用我们程序的人服务,主要是为用户服务。如果我们的代码像一篇篇简报,短小精悍,就会让维护它的人员相比维护一大坨一大坨的代码,来得思路清晰一点,痛苦指数减少一点,幸福指数上升一点。而且即使发生问题,也比较容易定位,而不至于大海捞针,这样可以提高维护人员的满意度。同时由于减少了修改BUG的时间,提升了反应速度,从而提高最终用户的满意度,让那些使用我们代码的人拥有幸福的微笑。
所以,我们在编程的时候,也要抱着让人易于理解、便于维护的的目的,多用清晰的简单的表达,所谓大道至简。编程时尽量说人话,要多考虑人的感受,而不是计算机的感受。
------------------------------------------------------
程序员的三大素养:clean code,重构,单元测试。我们需要编写整洁的,让人容易理解的代码,编写好之后,在不改变软件行为的情况下,随时重构,立即单元测试。 学会使用工具logicsocpe,sourcemonitor,Checkstyle,PMD,Sonar 如检测代码,提高效率。
我们还需要持续学习,培训师介绍了不少书籍如:《代码整洁之道 clean code》,重构经典:《重构:改善既有代码的设计》《重构手册》《编写可读代码的艺术》《代码大全2》《代码质量》《实现模式》《重构与模式》《修改代码的艺术》《编程人生》
------------------------------
- 函数十个一原则:
① 一个循环只做一件事;
② 一个变量只做一件事;
③ 一行代码只做一件事;
④ 一个函数只做一件事;
⑤ 单一抽象层次原则;
⑥ 代码组织一次只做一件事;
⑦ 一种变化仅修改一处;
⑧ 函数圈复杂度应该小于十;
⑨ 函数第一原则必须短小;
⑩ 编写函数必须一心一意,专注,怀有谦卑的心态。
- 常用判断原则
① 单一职责SRP(Simple responsibility principle)
② 开闭原则 OCP (Open-Closed Principle)
③ 单一抽象层次原则SLAP (single level of abstraction principle)
④ 函数查询修改分离原则 CQS(Command-Query Separation)
⑤ SOFA原则
--------------------------------------