• 王垠《编程的智慧》总结


    根据王垠大牛的《编程的智慧》文章总结,我看的原文地址是https://kb.cnblogs.com/page/549080/

    当经历有一些年头的编程后,才会更为共鸣,真正厉害的剑法,总是简单到无以复加的。

    一、提炼代码是编程的修行

    1. 反复回头推敲代码(优化、精简)是提高编程水平最高效的方法,这和写文章提炼是同样道理

    2. 衡量程序员水平不是看他写了多少代码,而是看他删除了多少代码

    3. 如反复提炼代码不再有进展,暂时放下,几个星期或几个月后再回头看,也许有焕然一新的灵感(也即温故而知新)

    4. 反复回头提炼能积累起灵感和智慧,从而在遇到新问题时直接朝正确或接近正确的方向前进

    5. 优雅代码的形状是枝丫分明的树状结构(tree)

      二、 如何写模块化代码

    6. 模块化不是文件或文本意义上的,而是逻辑上的

    7. 一个模块化就像电路芯片一样,有定义良好的有输入输出,函数就是这个电路片

    8. 避免写太长的函数,不超过40行最好,超出就拆分掉

    9. 常重复的哪怕只有二行也宜提取出去制造小的工具函数,它们能大大简化主函数逻辑(无散乱代码乱眼,每句都有意义能让函数更为清晰)

    10. 不要用宏来代替小函数,用宏是过时的观念,会使程序难以理解、调试,容易出错

    11. 每个函数只做一件简单的事情,不要搞通用函数

    12. 避免使用全局变量和类成员传递信息

    13. 真正优雅可读的代码,是几乎不需要注释的

    14. 不需注释,让代码自己解释自己

    15. 用程序语言的简洁严谨本身来表达它到底在干什么

    16. 使用能切实描述它们逻辑的函数和变量名字
      如put (elephant1, fridge2); 把大象放进冰箱。

    17. 局部变量应该尽量接近使用它的地方

    18. 局部变量名字应该简短

    19. 不要重用局部变量,局部变量应在有效域或可见范围内意义唯一

    20. 把复杂的逻辑提取出去做成帮助函数,则原来的地方就可使用一个有意义的函数代替注释

    21. 把复杂的表达式提取出去做成中间变量

    22. 按一句一表达的逻辑换行

      三、写简单代码

    23. 避免使用自增减表达式(i++,++i,i–,–i)

    24. 永远不要省略花括号(一块一作用域)

    25. 合理使用括号,不要盲目依赖操作符优先级

    26. 避免使用continue和break,如出现,努力改写循环

    27. 写直观的代码,如把

      if (action1() || action2() && action3()) { ... }

      写为:

      if (!action1()) { 
        if (action2()) { 
          action3(); 
        } 
      }
      

        

    28. 写无懈可击的代码,程序流的所有分支应到位,避免出现疏漏(例如if..else)

    29. if..else如果省略分支,每次读这段代码,你都不能确信它照顾了所有的情况,又得重新推理一遍,带来沉重的头脑开销

      四、正确处理错误

    30. try…catch里面,应该包含尽量少的代码

    31. 在异常出现的当时就作出处理,不要丢回给调用者

    32. 不应该使用 Exception这么宽泛的类型。你应该正好 catch 可能发生的那种异常A

      五、正确处理null指针

    33. 尽量不要产生null指针(不要用null初始变量、函数不要返回null)

    34. 不要把 null 放进“容器数据结构”里面

    35. 函数调用者:明确理解 null 所表示的意义,尽早检查和处理 null 返回值,减少它的传播

    36. 函数作者:明确声明不接受 null 参数,当参数是 null 时立即崩溃

      六、防止过度工程

    37. 当过度思考“将来”是过度工程即将出现的重要信号

    38. 过度关心并为“代码重用”设计也是过度工程,拖垮进度

    39. 过度关心“测试”也会引起过度工程
      根据这些,作者给出了防止过度工程的原则如下:

      • 1.先把眼前的问题解决掉,解决好,再考虑将来的扩展问题。

      • 2.先写出可用的代码,反复推敲,再考虑是否需要重用的问题。

      • 3.先写出可用,简单,明显没有 bug 的代码,再考虑测试的问题。

  • 相关阅读:
    Docker 使用Docker创建MySQL容器
    Javascript 转Date对象为字符串实现函数
    Jenkins 实现Gitlab事件自动触发Jenkins构建及钉钉消息推送
    Sysbench 使用总结
    ElementUI Dialog 结合Vue实现对话框body“二分”布局
    Element FORM结合Vue实现横向排列表单项
    Vue 插槽之插槽内容学习总结
    Vue 基于VSCode结合Vetur+ESlint+Prettier统一Vue代码风格
    Pytest Pytest源码分析
    Vue 中引用第三方js总结
  • 原文地址:https://www.cnblogs.com/IceAir/p/8194520.html
Copyright © 2020-2023  润新知