Ebook Studio

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

Example 3: query แบบ recursive บน content tree