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開出來的介面無關。

results matching ""

    No results matching ""