代码健康(1):什么是易理解的代码?

| 2021-03-01

什么是代码健康

良好的编码实践包含许多方面,并不是任何代码问题都能由检查工具发现。

例如,编写具有可读性和可维护性的代码,不仅仅是编写好的测试,或者拥有合适的检查工具,而是拥有一开始就容易理解和修改的代码。

谷歌关心软件工程过程与实践。

无论软件是手工编写,还是工具生成的,都可能影响代码的可读性、可维护性、稳定性或简单性。

因此,谷歌使用“代码健康”这个词来覆盖上述的所有方面。

如何确保工程师遵循这些实践,并且仍然允许他们独立做出合理的工程决策呢?

我们所做的工作是致力于改善工程师的日常工作状态,

使他们能够以更短的时间开发代码、减少开发工作、提高稳定性和改进性能。

每个人都希望他们的代码变得更容易理解,他们编写的库文件变得更简单。

因为我们都知道,这些东西能让我们更快前进,制造更好的产品。

这并不是说我们对谷歌的工程实践有严苛的规定。

我们仍然鼓励工程师对其项目做出自己认为最明智的决定。

什么是易理解的代码

当你看不懂别人提交给你审核的代码是什么意思时,你也许很容易会产生有一种感觉,觉得提交者比您更聪明。

但实际上,如果这段代码很难理解,那么,很可能是它过于复杂了。假如您熟悉它所使用的编程语言,那么阅读健康的代码几乎就像用您的母语阅读一本书一样简单

假设一个开发人员发给你下面这段Python代码,请你审核,

def IsOkay(n):
  f = False
  for i in range(2, n):
    if n % i == 0:
      f = True
  return not f

尝试理解它,如果理解它的时间超过几秒钟,那就是一种坏味道。此时,你只需要添加一个代码评论,说"我很难理解这段代码”,或者更具体一点,比如“请在这里使用更具描述性的命名”。

再过一会,提交者可能已经修改了代码,并将其再次发送给您审核:

def IsPrime(n):
  for divisor in range(2, n / 2):
    if n % divisor == 0:
      return False

  return True

现在我们可以很容易地阅读它,这本身就是一个好处。

通常,只需要要求开发人员写出清晰的代码,就会带来根本性的改进。 在上面的例子中,开发人员意识到了可能的性能改进,因为修改后的代码更容易理解——当数字不是素数时,函数可以更早返回了,并且循环变成为n / 2,而不是n。

现在我们可以很容易地理解这段代码了,还可以看到其中的很多问题。 例如,对于0和1,该函数会有奇怪行为,当然还有其他一些问题。但最重要的是,现在显而易见的是,应该删除整个函数,因为该函数所要实现的功能已经有预先定义的函数了,即:检测数字是否为素数的函数。澄清代码有助于开发人员和审阅者。

总之,不必浪费时间审查难以理解的代码,要求提交者将其澄清就好了。 事实上,这样的评论是代码评审员最有用和最重要的工具之一!