java in out 参数_总是避免Java中的in-out参数?
毫無疑問,輸入輸出參數(shù)會(huì)導(dǎo)致代碼混亂,因?yàn)樗鼈兛赡軙?huì)增加意外/不可預(yù)測的副作用.
所以,許多優(yōu)秀的程序員說:
避免使用in-out參數(shù)來更改可變方法參數(shù).希望保持參數(shù)不變.
對于一個(gè)完美主義程序員來說,他希望他的代碼是最干凈和最容易理解的,那么這個(gè)"規(guī)則"是否必須適用于所有情況?
例如,假設(shè)一種將元素添加到簡單列表的基本方法,有兩種方法:
第一種方式(帶有輸入?yún)?shù)):
private void addElementsToExistingList(List myList){
myList.add("Foo");
myList.add("Bar");
}
并且來電者是:
List myList = new ArrayList();
//.......Several Instructions (or not) .....
addElementsToExistingList(myList);
沒有參數(shù)的第二種方式:
private List addElementsToExistingList(List originalList){
List filledList = new ArrayList(originalList); //add existing elements
filledList.add("Foo");
filledList.add("Bar");
return filledList;
}
并且來電者是:
List myList = new ArrayList();
//.......Several Instructions (or not) .....
myList.addAll(addElementsToExistingList(myList));
第二種方式的優(yōu)點(diǎn):
參數(shù)未被修改=>沒有新代碼閱讀器出現(xiàn)意外副作用的風(fēng)險(xiǎn).
第二種方式:
非常冗長,可讀性很差......
當(dāng)然,你會(huì)告訴我,對于像這個(gè)簡單的代碼,第一種方法真的更方便.
但是,如果我們不考慮任何概念/代碼的難度,那么對于任何讀者(無論是否為初學(xué)者),我都認(rèn)為第二種方式更具邏輯性和顯而易見性.
然而,它違反了CQS原則,該原則認(rèn)為"命令"方法具有具有潛在的空白返回(但是因?yàn)樗菓T例而允許)副作用和具有返回類型且沒有副作用的"查詢"方法.
那么,激勵(lì)程序員采用什么呢?兩個(gè)混合代碼案例?或者保持"法律"期望始終避免進(jìn)出參數(shù)......
(當(dāng)然,添加Element的方法被命名用于表示示例,并且在實(shí)際代碼中將是一個(gè)錯(cuò)誤的名稱選擇).
總結(jié)
以上是生活随笔為你收集整理的java in out 参数_总是避免Java中的in-out参数?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 鸿蒙IPC摄像机,华为鸿蒙OS来了,海雀
- 下一篇: iot nb 曹淑敏 鹰潭_移动物联时代