Topic 13
Topic 13
โค้ด Ruby ใช้ร่วมจากโฟลเดอร์ en/ ของต้นฉบับ เพื่อให้สองภาษาผูกกับชุดทดสอบเดียวกัน
ภาพรวม
ทำไมหัวข้อนี้จึงสำคัญ
ทั้ง recursion และ closures เป็นไอเดียที่ทรงพลัง แต่ผู้เรียนมักเจอมันในรูปของกลเม็ดทาง ไวยากรณ์ที่แยกจากกัน หัวข้อนี้จึงสอนมันผ่านปัญหาเล็ก ๆ ต่อเนื่องกัน: เดินผ่านข้อมูลซ้อนก่อน จากนั้นสร้าง closure ที่เก็บพฤติกรรมการค้นหาไว้ แล้วค่อยนำทั้งสองอย่างมารวมกันใน traversal service ตัวเดียว
สิ่งที่ผมอยากให้คุณทำได้เมื่อจบหัวข้อนี้
เมื่อจบหัวข้อนี้ คุณควรจะ:
จุดที่ผมใช้ดูความเข้าใจ
ผมอยากให้คุณอธิบายได้ว่าทำไม traversal แบบ recursive กับกฎการ match จึงถูกแยกออก จากกัน แทนที่จะฝังรวมไว้ใน method ยาวอันเดียว
โน้ตสั้น
Recursion มีประโยชน์เมื่อรูปร่างของข้อมูลซ้ำกันเอง:
Closures มีประโยชน์เมื่อพฤติกรรมควรจำค่าบางอย่างจากจุดที่มันถูกสร้าง:
จุดที่ Ruby ทำได้ดีในหัวข้อนี้:
จุดที่ต้องระวังในหัวข้อนี้:
คำถามชวนคิด:
ตัวอย่างแบบลงมือดู
Example 1: โครงสร้างตัวเลขที่ซ้อนกัน
การรวมผลรวมของตัวเลขที่ซ้อนกันเป็นแบบฝึก recursion แรกที่ดี เพราะรูปแบบที่ซ้ำกันมอง เห็นได้ชัด แต่ละ child เป็นได้สองอย่าง:
ตรงนี้ช่วยให้ผู้เรียนเห็นง่ายว่า recursion กำลังทำงานอะไรอยู่
Example 2: Search predicates ในรูป closure
closure ดูสมจริงมากเมื่อผู้ใช้ส่งคำค้นเข้ามา แล้วโค้ดต้องการ matcher เล็ก ๆ ที่เรียกใช้ซ้ำได้:
matcher = TitleMatchers . containing ( "ruby" ) matcher . call ( "Ruby Blocks" ) # => true worked_examples.md ruby แบบนี้ดีกว่าการ hard-code คำค้นไว้ใน traversal