根据王垠大牛的《编程的智慧》文章总结,我看的原文地址是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 的代码,再考虑测试的问题。

posted on 2018-01-04 17:23  斑马猪  阅读(1751)  评论(1编辑  收藏  举报