Function with Boolean Arguments
結論
避免傳入 boolean 參數給任何function。
故事
程式碼內有這麼一行:
play(true);
讀到這一行的人會想,那我可以傳false給它嗎? 應該可以吧。所以 play(true)
就是播放,play(false)
就是停止。結果,仔細看實作細節:
function play(bRewind){ /* ... */}
其實play(true)
就是倒播,play(false)
才是播放。騙到所有人。回頭檢查歷史資訊,發現一開始只有
function play() {/* ... */ }
後來因為要加上倒播功能,實作細節也跟播放差不多,把參數傳進去就好了,才會變成萬惡的
function play(bRewind){ /* ... */}
處理方式
要加上倒播的功能,就寫
function play() {/* ... */ }
function rewind() {/* ... */ }
如果你覺得這兩個function裡面有200行程式碼是一樣的,那是內部實作未遵守 SRP ,跟這兩個function開出來的介面無關。