法則介紹
The Boy Scout Rule,中文一般翻譯為“童子軍法則”,是一個簡單卻非常有意義的軟件開發原則,它最早由軟件開發大師 Robert C. Martin (Uncle Bob) 在他的《Clean Code》一書中提出。
這條法則的核心思想非常簡單: “確保你離開代碼的時候比你發現它時更干凈。”
這條規則借鑒了童子軍的一種行為習慣:在露營時,童子軍團員會遵循一種紀律: 收拾營地時必須比他們到達時更干凈整潔,再離開。我們在編寫和改動代碼時,也可以應用類似的理念。
這并不要求你每次改動代碼時都去對整個代碼庫進行改造或重構,而是盡力讓你涉及的那部分代碼變得更好,比如更易讀、更清晰、更少問題、更優雅。
簡單概括就是:通過日積月累的小改進,逐步提升代碼質量。
舉個例子
場景
假設你是一位開發人員,正在修復一個在上市產品中的bug。你定位問題時,發現這個bug所在的代碼片段是一個結構非常混亂的函數,看起來充滿了臃腫的邏輯、重復代碼和混亂的命名,比如:
CLASS lcl_calculator DEFINITION.PUBLIC SECTION.METHODS calcIMPORTINGp TYPE fy TYPE it TYPE iRETURNINGVALUE(result) TYPE f.
ENDCLASS.CLASS lcl_calculator IMPLEMENTATION.METHOD calc.CASE t.WHEN 0.result = p + p * 0.03 * y.WHEN 1.result = p + p * 0.05 * y.WHEN OTHERS.result = 0.ENDCASE.ENDMETHOD.
ENDCLASS.
從代碼上你能看出來,這個函數的目標是根據用戶選擇的投資類型 (t
) 來計算利息。但閱讀這段代碼時,你可能感到困惑,因為變量命名模糊,且寫法欠優雅。
應用
按照這個法則,你在修復 bug 的同時可以順手將你看到的代碼稍作優化改進!比如,你可以:
- 改進命名:把模糊的變量命名替換為易理解的名稱,提高代碼可讀性。
- 去掉魔法數字:把
0
和1
這些數字抽取為具有含義的枚舉值或常量。 - 提取重復邏輯:簡化代碼分支。
經過一個簡單的重構,不額外引入新的邏輯,你的代碼可能會變成下面這樣:
TYPES: BEGIN OF ENUM investment_type.
TYPES low_risk VALUE '#LOW_RISK',high_risk VALUE '#HIGH_RISK'.
TYPES END OF ENUM investment_type.CLASS lcl_interest_calculator DEFINITION.PUBLIC SECTION.METHODS calculate_interestIMPORTINGprincipal TYPE fyears TYPE iinvestment_type TYPE investment_typeRETURNINGVALUE(result) TYPE f.
ENDCLASS.CLASS lcl_interest_calculator IMPLEMENTATION.METHOD calculate_interest.DATA: interest_rate TYPE f.CASE investment_type.WHEN investment_type-low_risk.interest_rate = 0.03.WHEN investment_type-high_risk.interest_rate = 0.05.WHEN OTHERS.RAISE EXCEPTION TYPE cx_sy_illegal_argumentEXPORTINGtextid = 'Unknown investment type'.ENDCASE.result = principal + (principal * interest_rate * years).ENDMETHOD.
ENDCLASS.
優化后的好處:
- 更好的可讀性和維護性:變量名和常量的引入讓代碼一目了然,其他開發者將來再看這段代碼時理解起來更輕松。
- 捕獲潛在問題:通過改進代碼,你可能發現原代碼中的隱含錯誤(例如未處理未知投資類型的情況)。
- 逐步改善代碼庫質量:這種點滴的改進積累起來,整個系統的代碼質量就會越來越好。
為什么它重要?
-
技術債務的治理 : 代碼往往隨著時間的推移越來越混亂,甚至積累大量“技術債務”。The Boy Scout Rule 就像是日常的清潔和整理,能讓技術債務得到緩慢但持續的處理,避免問題堆積成“無法維護的大山”。
-
提升團隊效率 : 每個人在修改代碼時稍微做點力所能及的改進,整個團隊的代碼質量就會發生質變。未來在調試或擴展功能時,大家能夠更高效地完成工作。
-
防止“破窗效應” : 如果代碼長時間得不到維護,每次有新開發人員碰到一段糟糕的代碼時都會想“反正沒人改正,我也懶得管”,久而久之問題會更嚴重。The Boy Scout Rule 提倡每次改進一點點,從而避免這種情況。
總結
The Boy Scout Rule 是一種輕量級、長期有效的代碼管理策略,它強調 “每日清理” 的意識。在日常開發中,我們不能總是追求完美,但至少可以在我們觸碰的地方,盡可能地讓它變得更好一點點。
Remember: “Leave the code better than you found it.” 👌