zoukankan      html  css  js  c++  java
  • [代码整洁]他人感悟

    这次的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原则

    --------------------------------------

  • 相关阅读:
    6-ESP8266 SDK开发基础入门篇--操作系统入门使用
    5-ESP8266 SDK开发基础入门篇--了解一下操作系统
    【java规则引擎】基本语法和相关属性介绍
    【eclipse】 怎么解决java.lang.NoClassDefFoundError错误
    【java规则引擎】java规则引擎搭建开发环境
    【4】JDK和CGLIB生成动态代理类的区别
    【java规则引擎】一个基于drools规则引擎实现的数学计算例子
    【3】SpringMVC的Controller
    设计模式之禅之代理模式
    【java规则引擎】规则引擎RuleBase中利用观察者模式
  • 原文地址:https://www.cnblogs.com/denghuachengle/p/5551597.html
Copyright © 2011-2022 走看看