เพื่อให้ง่ายขึ้นข้อ จำกัด หมายถึงมีวิธีที่ถูกต้องน้อยกว่าในการรวมสิ่งต่าง ๆ เข้าด้วยกันและฟังก์ชั่นชั้นหนึ่งทำให้ง่ายขึ้นในการแยกแยะสิ่งต่าง ๆ เช่นโครงสร้างลูป ลองวนซ้ำจากคำตอบนี้ตัวอย่างเช่น
for (Iterator<String> iterator = list.iterator(); iterator.hasNext();) {
String string = iterator.next();
if (string.isEmpty()) {
iterator.remove();
}
}
นี่เป็นวิธีหนึ่งที่ปลอดภัยใน Java เพื่อลบองค์ประกอบออกจากคอลเลกชันในขณะที่คุณทำการวนซ้ำ มีหลายวิธีที่ดูใกล้เคียง แต่ผิด บางครั้งคนที่ไม่รู้วิธีนี้จะต้องใช้วิธีการที่ซับซ้อนเพื่อหลีกเลี่ยงปัญหาเช่นการวนซ้ำผ่านการทำสำเนาแทน
ไม่ใช่เรื่องยากมากที่จะสร้างยาชื่อสามัญนี้ดังนั้นมันจะทำงานได้มากกว่าคอลเลกชันStrings
แต่หากไม่มีฟังก์ชั่นชั้นหนึ่งคุณไม่สามารถแทนที่ภาคแสดง (เงื่อนไขภายในif
) ดังนั้นรหัสนี้จึงมีแนวโน้มที่จะคัดลอกและวาง และแก้ไขเล็กน้อย
รวมฟังก์ชั่นชั้นหนึ่งที่ให้ความสามารถในการส่งผ่านเพรดิเคตเป็นพารามิเตอร์ด้วยข้อ จำกัด ของการเปลี่ยนไม่ได้ที่ทำให้มันน่ารำคาญมากถ้าคุณไม่ทำและคุณมาพร้อมโครงสร้างแบบง่ายๆเช่นfilter
ในรหัส Scala นี้ นั่นทำสิ่งเดียวกัน:
list filter (!_.isEmpty)
ทีนี้ลองนึกถึงสิ่งที่ชนิดของระบบตรวจสอบให้คุณ ณ เวลารวบรวมในกรณีของสกาล่า แต่การตรวจสอบเหล่านี้จะทำโดยระบบประเภทแบบไดนามิกในครั้งแรกที่คุณเรียกใช้:
list
ต้องเป็นประเภทบางประเภทที่รองรับfilter
เมธอดคือคอลเล็กชัน
- องค์ประกอบของ
list
ต้องมีisEmpty
วิธีการที่ส่งกลับแบบบูล
- ผลลัพธ์จะเป็นคอลเล็กชั่นที่มีขนาดเล็กลง (อาจเป็นไปได้) ที่มีองค์ประกอบประเภทเดียวกัน
เมื่อตรวจสอบสิ่งเหล่านั้นแล้วจะมีวิธีอื่นใดอีกที่โปรแกรมเมอร์จะทำผิดพลาด? ฉันลืมไปโดยบังเอิญ!
ซึ่งทำให้เกิดความล้มเหลวของกรณีทดสอบอย่างชัดเจน นั่นเป็นความผิดพลาดเพียงอย่างเดียวที่ฉันสามารถทำได้และฉันทำได้เพราะฉันแปลจากรหัสโดยตรงที่ผ่านการทดสอบสำหรับเงื่อนไขผกผัน
รูปแบบนี้ซ้ำแล้วซ้ำอีก ฟังก์ชั่นชั้นหนึ่งช่วยให้คุณปรับสภาพสิ่งต่าง ๆ ให้เป็นสาธารณูปโภคขนาดเล็กที่สามารถนำกลับมาใช้ใหม่ได้ด้วยความหมายที่แม่นยำข้อ จำกัด เช่นการเปลี่ยนไม่ได้ทำให้คุณมีแรงกระตุ้นและพิมพ์การตรวจสอบพารามิเตอร์ของโปรแกรมอรรถประโยชน์เหล่านั้น
แน่นอนว่าทั้งหมดนี้ขึ้นอยู่กับโปรแกรมเมอร์ที่รู้ว่าฟังก์ชั่นลดความซับซ้อนอย่างที่filter
มีอยู่แล้วและสามารถค้นหาได้หรือรับรู้ถึงประโยชน์ของการสร้างด้วยตัวเอง พยายามใช้สิ่งนี้ด้วยตัวคุณเองทุกที่โดยใช้การเรียกซ้ำแบบหางเท่านั้นและคุณจะได้กลับมาในเรือที่ซับซ้อนเช่นเดียวกับเวอร์ชั่นที่จำเป็นยิ่งกว่าเท่านั้น เพียงเพราะคุณสามารถเขียนได้อย่างง่าย ๆ ไม่ได้แปลว่าเวอร์ชั่นง่าย ๆ ชัดเจน