提高程式碼可維護性 — 布林條件寫法

2023年10月21日

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

在《邁向資深工程師系列》系列文當中,我們摘要了業界資深工程師的觀點,讓大家都能寫出更好維護的程式碼。

本篇摘要前 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 上追蹤我們