天天看點

[譯文] Google 廁所的代碼測試題

原文标題:Code Health: Reduce Nesting, Reduce Complexity

釋出日期:美國時間2017-06-05

釋出管道:Google Testing Blog

文章作者:Elliott Karpilovsky

文章譯者:丁老九

這是我們代碼健康系列的另一篇文章。這篇文章的一個版本最初出現在世界各地的谷歌浴室,作為一個谷歌的廁所事件測試。你可以下載下傳一個友好的版本在你的辦公室顯示。

—— Elliott Karpilovsky

深度嵌套的代碼會大大降低代碼可讀性,并且容易出錯。

請嘗試在以下兩個版本的代碼中發現錯誤:

[譯文] Google 廁所的代碼測試題

答案揭曉:

代碼中輸出

wrong encoding

unauthorized

錯誤資訊的語句所對應的判斷條件發生混淆,實際應該調換一下判斷條件。這個bug在上圖中藍色區域的代碼版本中需要層層抽絲剝繭才能發現,而在綠色區域的重構版本中能更容易的發現。

上面綠色區域的重構技術稱為保護語句。一條保護語句隻檢查一個異常邏輯,如果條件沒有滿足,就能立即回報目前程式出現的問題。最終實作将計算邏輯與錯誤邏輯分離開來。當我們在閱讀邏輯分離後的代碼結構時,思維也會立即轉變為錯誤處理語句塊和正常計算處理語句塊,對比之前的

if-else

四重嵌套結構,重構版本更易于閱讀和維護。

以下準則能幫助你在代碼中盡量減少嵌套:

1. 條件語句塊盡量的簡短。

2. 當循環和分支超過兩層時,考慮重構。

3. 将嵌套邏輯移動到單獨的函數中。例如,如果您需要周遊每個包含清單的對象清單(例如帶有重複字段的協定緩沖區),則可以定義一個函數來處理每個對象,而不是使用雙重嵌套循環。

減少嵌套會讓代碼可讀性更好,同時也能更容易的找出bug,開發人員可以更快的疊代,程式也會越來越穩定。

簡化代碼,讓程式設計更輕松!

原文位址

繼續閱讀