Osheep

时光不回头,当下最重要。

代码健康: 减少嵌套, 降低复杂性

原文: Code Health: Reduce Nesting, Reduce Complexity


多层嵌套的代码不仅影响可读性,同时很容易导致错误。试着在下面同一份代码的两个版本中找出 bug:

《代码健康: 减少嵌套, 降低复杂性》

spot the bug

答案: “wrong encoding” 和 “unauthorized” 错误被交换了. 在重构后的版本中,很容易发现这个错误, 因为在重构版本的检查中,被认为是错误的情况都被处理了。

《代码健康: 减少嵌套, 降低复杂性》

error

上面所展示出的重构技术被称为保护条款 (guard clauses). 一个保护条款会检查一个判断标准, 如果标准未被满足, 那么它将会很快失败。它分离了计算逻辑 (computational logic) 与错误逻辑 (error logic). 通过消除在错误检查与捕获之间的认知鸿沟, 它释放了心理上的处理能力. 因此, 重构后的版本更具有可读性与维护性。

下面是一些在代码中减少嵌套的经验:

  • 条件判断的代码块不要跨度太大,相隔太远. 通过就近处理各种情况来增加可读性.(It increases readability by keeping things local.)

  • 当你的循环和分支超过 2 层时考虑重构.

  • 考虑将嵌套的逻辑分为独立的函数。比如, 如果你在一个循环中对一些对象进行处理, 这其中的每个对象都包含一个列表 (比如一个有着重复字段的协议缓冲区), 那么你可以定义一个函数来处理这里面的每个对象,而不是使用一个两层的嵌套循环.

减少嵌套会带来更加可读的代码,让我们更加容易发现 bug, 加速开发迭代和增强稳定性。尽你所能去简化代码!

点赞