提高程式碼可維護性 — 布林條件寫法
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
。,但總的來說,檢查一個正面事物的存在或缺失,對程式碼的讀者來說,比檢查一個負向條件的存在或缺失更為簡單。