กฎเกี่ยวกับความคมชัดของชนิดพารามิเตอร์เมธอดชนิดส่งคืนและชนิดคุณสมบัติ


9

บางครั้งที่ผ่านมาฉันอ่าน "กฎของหัวแม่มือ" เกี่ยวกับความคมชัดของชนิดพารามิเตอร์เมธอดชนิดส่งคืนและชนิดคุณสมบัติ แต่ฉันจำไม่ได้

มันบอกอะไรบางอย่างเกี่ยวกับการรักษาประเภทการคืนสินค้าของคุณอย่างเป็นรูปธรรมมากที่สุดและพารามิเตอร์ประเภทของคุณจะเป็นนามธรรมมากที่สุด ... หรือในทางกลับกัน

ฉันไม่รู้ว่าจริง ๆ แล้วมันเป็นคำแนะนำที่ดีหรือไม่ดีดังนั้นหากคุณมีความคิดของคุณเองเกี่ยวกับเรื่องนี้โปรดแจ้งความคิดเห็น

ไชโย

คำตอบ:



7

การมีอินพุตแบบนามธรรมและเอาต์พุตคอนกรีตทำให้ฟังก์ชันของคุณกว้างขึ้น ซึ่งหมายความว่าสามารถใช้งานได้หลายวิธี ในทางตรงกันข้ามมันทำให้ข้อ จำกัด ของวิธีการของคุณแข็งแกร่งขึ้นการ จำกัด วิธีการใช้งานในอนาคตของมันอาจทำงาน ดังนั้นการแลกเปลี่ยนระหว่างเป้าหมายที่แตกต่างกัน


4

อาจเป็นไปได้ว่าคุณได้ยินการคาดการณ์ของกฎหมายของ Postel : "จงระมัดระวังในสิ่งที่คุณส่งให้เสรีในสิ่งที่คุณยอมรับ"

ส่วนใหญ่จะเกี่ยวกับการเพิ่มความสามารถในการนำกลับมาใช้ของรหัสให้มากที่สุด มันง่ายที่จะเกิดกรณีเพื่อแสดงให้เห็นว่าทำไมมันถึงช่วยได้ พิจารณา Java Iterable<T>เป็นตัวอย่าง หากสิ่งเดียวที่เมธอดของคุณทำซ้ำคือทั้งหมดการTมีIterable<T>ชนิดพารามิเตอร์ของคุณอนุญาตให้คุณใช้วิธีนั้นกับคลาสที่มีอยู่ภายใน 60 คลาสไม่ต้องพูดถึงคลาสที่กำหนดเองใด ๆ ที่ใช้อินเทอร์เฟซ ถ้าคุณ จำกัด ให้พูดVector<T>แล้วรหัสใด ๆ ที่เรียกวิธีการของคุณจะต้องแปลงเป็นVector<T>อันดับแรก

ในทางกลับกันการคืนค่าIterable<T>จากเมธอด จำกัด จำนวนของรหัสที่สามารถใช้ค่าส่งคืนของคุณกลับไปยังที่ใช้Iterable<T>พารามิเตอร์ หากคุณกลับมาเป็นชนิดที่เป็นรูปธรรมมากเช่นVector<T>นั้นค่าตอบแทนของคุณจะสามารถผ่านเข้าสู่วิธีการใด ๆ ที่จะนำSerializable, Cloneable, Iterable<T>, Collection<T>, List<T>, RandomAccess, Vector<T>, AbstractList<T>หรือAbstractCollection<T>, และมันจะทำงานตามที่คาดไว้


กฎหมายของ Postel ค่อนข้างสูงในรายการ "ข้อผิดพลาดด้านวิศวกรรมซอฟต์แวร์ที่ใหญ่ที่สุด"
CodesInChaos
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.