原文连接: 编程的原则:改善代码质量的101个方法
自始至终都以最简单的逻辑编写代码,让编程初学者一眼就能看懂。在编程时咱们要重视的是局部的完整性,而不是复杂的总体关联性。程序员
软件故障常集中在某一个区域,而这些区域都有一个共同的特色,那就是复杂。编写代码时若是追求简单易懂,代码就很难出现问题。不过,简单易懂的代码每每给人一种不够专业的感受。这也是经验老到的程序员喜欢写老练高深的代码的缘由。因此咱们要有足够的定力来抵挡这种诱惑。编程
放下高超的技巧,坚持用简单的逻辑编写代码。既然故障集中在代码复杂的区域,那咱们只要让代码简单到让故障无处可藏便可。不要盲目地让代码复杂化、臃肿化,要保证代码简洁。安全
同等对待相同的东西,坚持不搞特殊。同等对待,举例来讲就是同一个模块管理的数值所有采用同一单位、公有函数的参数个数统一等。框架
相同的东西用相同的形式表现可以使不一样的东西更加突出。不一样的东西每每容易产生 bug
。遵循同构原则能让咱们更容易嗅出代码的异样,从而找出问题所在。
统一的代码颇具美感,而美的东西通常更容易让人接受,所以统一的代码有较高的可读性。函数
可靠与简单是代码不可或缺的性质,在编写代码时,务必克制住本身的表现欲,以规范为先。编码
在思考一个处理时,也要想到与之成对的处理。好比有给标志位置 1
的处理,就要有给标志位置 0
的处理。设计
具备对称性的代码可以帮助读代码的人推测后面的代码,提升其理解代码的速度。同时,对称性会给代码带来美感,这一样有助于他人理解代码。
此外,设计代码时将对称性归入考虑的范围能防止咱们在思考问题时出现遗漏。若是说代码的条件分支是故障的温床,那么对称性就是思考的框架,能有效阻止条件遗漏。code
在出现“条件”的时候,咱们要注意它的“反条件”。每一个控制条件都存在与之成对的反条件(与指示条件相反的条件)。要注意条件与反条件的统一,保证控制条件具备统一性。
咱们还要考虑到例外状况并极力避免其发生。例外状况的特殊性会破坏对称性,成为故障的温床。特殊状况过多意味着需求没有获得整理。此时应从新审视需求,尽可能从代码中剔除例外状况。
命名也要讲究对称性。命名时建议使用 set/get
、start/stop
、begin/ end
和 push/pop
等成对的词语。对象
注意事物的主从关系、先后关系和本末关系等层次关系,整理事物的关联性。
不一样层次各司其职,同种处理不跨越多个层次,这一点很是重要。好比执行了获取资源的处理,那么释放资源的处理就要在相同的层次进行。又好比互斥控制的标志位置 1
和置 0
的处理要在同一层次进行。资源
有明确层次结构的代码能帮助读代码的人抽象理解代码的总体结构。读代码的人能够根据自身须要阅读下一层次的代码,掌握更加详细的信息。
这样能够提升代码的可读性,帮助程序员表达编码意图,下降 bug
发生的几率。
在编写代码时设计各部分的抽象程度,构建层次结构。保证同一个层次中的全部代码抽象程度相同。另外,高层次的代码要经过外部视角描述低层次的代码。这样作能让调用低层次代码的高层次代码更加简单易懂。
一个功能若是能够经过多个功能的线性结合来实现,那它的结构就会很是简单。
反过来,用条件分支控制代码、毫无章法地增长状态数等行为会让代码变得难以理解。咱们要避免作出这些行为,提升代码的可读性。
复杂的处理流程是故障的温床。故障多出如今复杂的条件语句和循环语句中。另外,goto
等让流程出现跳跃的语句也是故障的多发地。
若是能让处理由高层次流向低层次,一鼓作气,代码的可读性就会大幅提升。与此同时,可维护性也将提升,添加功能等改良工做将变得更加容易。
通常来讲,自上而下的处理流程简单明快,易于理解。咱们应避开复杂反复的处理流程。
尽可能减小条件分支的数量,编写能让代码阅读者线性地看完整个处理流程的代码。
为此,咱们须要把一些特殊的处理拿到主处理以外。保证处理的统一性,注意处理的流程。记得时不时俯瞰代码总体,检查代码是否存在过于复杂的部分。
另外,对于通过长期维护而变得过于复杂的部分,咱们能够考虑对其进行重构。明确且可靠的设计不只对咱们自身有益,还能够给负责维护的人带来方便。
逻辑具备清晰性就表明逻辑能清楚证实自身的正确性。也就是说,咱们编写的代码要让人一眼就能判断出没有问题。任何不明确的部分都要附有说明。
代码免不了被人一遍又一遍地阅读,因此代码必须保持较高的可读性。编写代码时若是追求高可读性,咱们就不会采用取巧的方式编写代码,编写出的代码会很是天然。代码是给人看的,也是由人来修改的,因此咱们必须以人为对象来编写代码。消除代码的不肯定性是对本身的做品负责,这么作也能够为后续负责维护的人提供方便。
咱们应选用直观易懂的逻辑。会给读代码的人带来疑问的部分要么消除,要么加以注释。另外,咱们应使用任何人都能马上理解且不存在歧义的术语。要特别注意变量名等必定不能没有意义。
就是在编写代码时刻意将不可能的条件考虑进去。好比即使某个 if
语句必定成立,咱们也要考虑 else
语句的状况;即使某个 case
语句必定成立,咱们也要考虑 default
语句的状况;即使某个变量不可能为空,咱们也要检查该变量是否为 null
。
硬件提供的服务必须保证安全,软件也同样。硬件方面,好比取暖器,为防止倾倒起火,取暖器通常会配有倾倒自动断电装置。一样,设计软件时也须要考虑各类状况,保证软件在各类状况下都能安全地运行。这一作法在持续运营服务和防止数据损坏等方面有着积极的意义。
选择相对安全的方法对具备不肯定性的部分进行设计。列出全部可能的运行状况,确保软件在每种状况下都能安全运行。理解需求和功能,将各类状况正确分解到代码中,这样能有效提升软件安全运行的几率。为此,咱们也要将不可能的条件视为考察对象,对其进行设计和编程。不过,为了统一标准,咱们在编写代码前最好规定哪些条件须要写,哪些条件不须要写。