Mike Zhang

DNS DevOps CISSP CISA Security+ 摄影 程序员 北京

《代码整洁之道》阅读笔记

30 Jul 2018 » program

代码整洁的5S原则

  • 整理:组织代码,通过恰当的命名手段搞清楚这些事务所在
  • 整顿:所有代码都在各自的位置,保证代码整洁
  • 清楚: 删除不需要的代码,保证整洁
  • 清洁:代码编写标准化和具有一定的构建方式和实践
  • 自律: 处处约束自己,并乐于改进

对于写代码,要重视小处,对于自己的代码要保持诚实,对同事坦诚代码的现状,不自欺。尽管不需要对于代码强求完美,但求竭诚尽力,持续并乐于接受改进

Code Monkey: 对编程缺乏真正的理解,编写代码没有规范,一旦运行起来就以为工作结束。缺少持续改进的编码态度。

混乱的代码

代码如果前期不做规范,随着时间的推移,越来越多的问题积累,导致项目的最终崩溃。混乱的代码降低团队生产力,当趋向于零的时候,管理层趋向于增加更多的人手到项目中,期望提升整体的生产水平,但是新人不熟悉系统设计,无法理解什么样的修改符合设计的意图,导致更多的混乱发生。

稍后等于永远不会

程序员不能因为时间紧迫而放松代码质量,同时遵从那些不了解混乱风险的项目经理意愿,也是一种不专业的体现。

代码感觉: 能从混乱的代码中看到改进的可能与方式,帮助程序员实现代码的优化。

整洁代码

不同人对于整洁代码的定义不同,但是都会有一些共同的理解比如:

– 整洁的代码只做好一件事情

– 简单直接,不隐藏设计者意图

– 没有由于和不必要的设计,使用有意义的命名

– 测试,单元测试和验收测试

– 没有重复代码

编码的”童子军军规” 每次签入代码都要比签出时候更干净,比如改写一个变量名称,拆分一个长函数,消除一点点重复代码,清理一些嵌套的语句等等。 只有持续的改进才能体现出对于编码的专业性

命名

使用常量定义一些魔法数字,并且保持可搜索性,比如使用MAX_CLASSES_PER_STUDENT来代替数字7,明显好搜索和管理。

匈牙利标记法:使用类似于pfnEatApple(函数指针类型),pMenu(指针类型)等的定义方式,帮助程序员记住该值的类型,但是对于现在的程序来说类别定义一般强类型语言编码环境都可以实现自动检测,此种命名就属于多余了。

方法名称 可以根据需要加上get , set ,is 前缀来实现不同的目的。 参数尽量保持少的数量,过多的数量导致测试困难,使用也会困难。 同时参数的命名也要依赖于具体的目的,比如src和dst两个经常会出现的参数变量名。

尽量不要使用双关语,依赖于具体的使用函数解决的问题,进行定义,比如使用insert和append而少用add来标示增加。减少使用者的猜测。

函数

函数应该尽量保持短小,20行之内最佳,使用if else 或者while的话,内部的代码块应该只有一行,比如一个函数调用,并且函数应具有说明性的名称,减少不必要的注释内容。

函数应该只做一件事情,同一函数名下的抽象层上的步骤,

同一个抽象层级 : 指的是执行的函数中,尽量不要函数提调用,底层调用混杂在一起,会导致让人迷惑,如果不去管理,后续可能增加更多的细节和函数纠缠在一起。

开放闭合原则 OCP :对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对类进行任何修改。对于经常发生变化的状态一般将其封装为一个抽象,实现扩展新的功能。

不要害怕长的命名,长且具有描述性的命名比短令人费解的命名要好很多,使用一定的命名规范保证可阅读性。

函数参数的个数尽量保持在两个以内,过多的参数应该尝试将其重构为单参数形式,或者是类的方式

函数的副作用:比如具有一定时序性的函数调用,checkPassword函数会删除原有的session会话,如果必须的话需要在函数名称中加入描述,比如checkPasswordAndInitializeSession()

goto语句谨慎使用,导致函数执行流程不明确。

代码编写可能开始无法保持高质量编写,大量的冗余和复杂,但应该不断的优化,使得代码保持一定的规范。不断的打磨代码,组装好代码。