ฟีเจอร์ภาษาเชิงฟังก์ชัน: ตัวซ้ำและโคลเชอร์ (Functional Language Features: Iterators and Closures)
การออกแบบภาษา Rust ได้รับแรงบันดาลใจจากภาษาและเทคนิคที่มีอยู่มากมาย และหนึ่งในอิทธิพลที่สำคัญคือ การเขียนโปรแกรมเชิงฟังก์ชัน (functional programming) การเขียนโปรแกรมในสไตล์ฟังก์ชันนัลมักรวมถึงการใช้ฟังก์ชันในฐานะค่า เช่น การส่งฟังก์ชันเป็นอาร์กิวเมนต์ การคืนค่าฟังก์ชันจากฟังก์ชันอื่น การมอบหมายฟังก์ชันให้แก่ตัวแปรเพื่อนำไปประมวลผลในภายหลัง เป็นต้น
ในบทนี้ เราจะไม่ถกเถียงกันในประเด็นที่ว่าการเขียนโปรแกรมเชิงฟังก์ชันคืออะไรหรือไม่ใช่อะไร แต่เราจะหารือเกี่ยวกับฟีเจอร์บางประการของ Rust ที่มีความคล้ายคลึงกับฟีเจอร์ในหลายภาษาซึ่งมักถูกอ้างถึงว่าเป็นแบบฟังก์ชันนัล
โดยเฉพาะอย่างยิ่ง เราจะครอบคลุมเรื่อง:
- โคลเชอร์ (Closures) โครงสร้างที่เหมือนฟังก์ชันซึ่งคุณสามารถจัดเก็บไว้ในตัวแปรได้
- ตัวซ้ำ (Iterators) วิธีการประมวลผลชุดของสมาชิก
- วิธีใช้โคลเชอร์และตัวซ้ำเพื่อปรับปรุงโปรเจกต์ I/O ในบทที่ 12
- ประสิทธิภาพของโคลเชอร์และตัวซ้ำ (สปอยล์: พวกมันทำงานเร็วกว่าที่คุณคิด!)
เราได้ครอบคลุมฟีเจอร์อื่นๆ ของ Rust ไปบ้างแล้ว เช่น การจับคู่รูปแบบ (pattern matching) และ enums ซึ่งได้รับอิทธิพลจากสไตล์ฟังก์ชันนัลด้วยเช่นกัน เนื่องจากเก่งกาจในเรื่องโคลเชอร์และตัวซ้ำเป็นส่วนสำคัญในการเขียนโค้ด Rust ที่รวดเร็วและมีความเป็นธรรมชาติ (idiomatic) เราจึงมอบทั้งบทนี้ให้แก่พวกมัน