ในหน้า 45 ของรหัสสะอาดของโรเบิร์ตซี. มาร์ติน: คู่มืองานฝีมือซอฟต์แวร์เปรียวมาร์ตินเขียนว่าควรหลีกเลี่ยงข้อโต้แย้งเกี่ยวกับผลลัพธ์ ฉันมีปัญหาในการเข้าใจความหมายของ "เอาท์พุทอาร์กิวเมนต์" และทำไมพวกเขาควรหลีกเลี่ยง
ตัวอย่างเช่นมาร์ตินสำหรับอาร์กิวเมนต์ส่งออกเรียกฟังก์ชันappendFooter(s);
public void appendFooter(StringBuffer report)
การปรับปรุงรหัสของเขาคือreport.appendFooter();
อาจเป็นเพราะการขาดบริบทของรหัส แต่ฉันไม่เห็นว่าการใช้ข้อโต้แย้งเอาท์พุทจะถือว่าการเข้ารหัสไม่ดี ใครช่วยอธิบายแนวคิดหรือให้ตัวอย่างโค้ดเพิ่มเติมเพื่อให้เข้าใจสิ่งนี้
ฟังก์ชั่นต่อไปนี้จะถือว่าเป็นตัวอย่างของโค้ดที่ไม่สะอาดตามหลักการข้างต้นหรือไม่
int[] numberArray = {3, 5, 7, 1};
sortArray(numberArray);
ถ้าข้างต้นเป็นการละเมิดหลักการของ Martin ที่ไม่ได้ใช้อาร์กิวเมนต์เอาท์พุทจะดีกว่าไหมถ้ามีวัตถุที่มีอาร์เรย์เป็นเขตข้อมูลและฟังก์ชันที่สามารถเรียกให้เรียงลำดับอาร์เรย์ได้
ObjectWithArrayField numberArray = new ObjectWithArrayField(3, 5, 7, 1);
numberArray.sort();
sortArray(numberArray)
แน่นอนnumberArray
ในสถานที่ หรือมันทำสำเนาnumberArray
เรียงลำดับสำเนาและส่งคืนสำเนาที่เรียงลำดับโดยไม่เปลี่ยนแปลงnumberArray
เลย?