編寫不帶參數且有副作用,改變對象狀態或帶參數並處理它的單參數方法的方法會更好嗎?如果第二種方法更可取,那麼最好是顯式地返回輸入參數還是僅僅處理它,因爲調用者應該有一個對它的引用。輸入輸出參數與不帶副作用的參數
更確切地說:我正在處理XML並閱讀了第一章的Clean Code book我試圖將大處理方法拆分爲許多小方法,因此這種方法可以像故事那樣讀取:
cleanHeader();
extractMetaInfo();
appendStuff();
等等,其中這些方法都是對作爲成員存儲的XML文檔進行操作。
恕我直言,減少參數計數與沒有副作用的最佳做法似乎在這裏相互矛盾。如下寫作會更好嗎?
doc = cleanHeader(doc);
doc = extractMetaInfo(doc);
doc = appendStuff(doc);
在這個問題上是否有明確的「正確」?一個明確的答案依賴於多少上下文?還是有第三種選擇我沒有想過?
編輯:發現一個related question與矛盾的答案。謹慎闡述?
副作用是所有邪惡的母親。甚至沒有得到接近。 – leppie 2011-01-14 09:11:06
謝謝你,leppie。這是相當明確:)並且似乎非常合理。你能否提供一個鏈接/其他信息來支持你的判斷?最好是返回原始的論點還是改變它的「功能風格」,即,含蓄? – kostja 2011-01-14 09:17:59
我強烈推薦閱讀Joshua Bloch撰寫的「有效的Java」一書 - 他在這個具體問題中投票反對(使用參數)。在一般布洛赫prefere無國籍班不同的原因(性能和可用性)。 @kostja - 你可以用它作爲leppie語句的參考 – Ralph 2011-01-26 16:26:09