提高代码可维护性 — 布林条件写法

2023年10月21日

💎 加入 E+ 成長計畫 與超過 350+ 位軟體工程師一同在社群中成長,並且獲得更多的軟體工程學習資源

在《提高代码可维护性》系列文当中,我们摘要了业界资深工程师的观点,让大家都能写出更好维护的代码。本篇摘要前 Google 资深工程师 Max Kanat-Alexander 撰写的《Improve Readability With Positive Booleans》一文。

Max 提到,阅读健康的代码,应该像阅读母语书籍一样轻松。如果你必须停下苦思某行代码在做什么,那代表代码的可读性有问题。有一个在写布林条件判断 (boolean condition) 时可以用的小技巧,可以协助提升代码可读性,那就是让布林检查指向某个“正向”判断,而非某个负向判断。

他举了一个比较极端的例子:

if not nodisable_kryponite_shield:
  devise_clever_escape_plan()
else:
  engage_in_epic_battle()

这段代码在做什么?读完后多数人都可以理解,但在读的时候可能要想一下,让我们看看可以如何让上述的代码更好读。

很简单,把条件判断变成正向检查(某条件的存在、某条件被启用、某条件为真),而不是你想进行的负向检查(某条件有缺失、某条件被禁用、某事物为假)。

具体可以调成这样,会比上面的例子更容易阅读和理解。

if not enable_kryponite_shield:
  devise_clever_escape_plan()
else:
  engage_in_epic_battle()

如果你的条件看起来像 if not ... else ...,只要改成将正向条件放在前面,就会变更好读。

if enable_kryponite_shield:
  engage_in_epic_battle()
else:
  devise_clever_escape_plan()

这样一改,这段代码的意图,就变得明确。

在许多其他情境中,这样做都能增强可读性。例如,指令 foo --disable_feature=False 会比 foo --enable_feature=True 更难阅读和思考,特别是当你改变默认设定来启用该功能时,要让人多思考才会。

当然也有一些例外,例如,在 Python 中,if foo is not None 可以被认为是一个正向检查,即使它含有 not。,但总的来说,检查一个正面事物的存在或缺失,对代码的读者来说,比检查一个负向条件的存在或缺失更为简单。

🧵 如果你想收到最即時的內容更新,可以在 FacebookInstagram 上追蹤我們