提高代码可维护性 — 布林条件写法
2023年10月21日
在《提高代码可维护性》系列文当中,我们摘要了业界资深工程师的观点,让大家都能写出更好维护的代码。本篇摘要前 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
。,但总的来说,检查一个正面事物的存在或缺失,对代码的读者来说,比检查一个负向条件的存在或缺失更为简单。