Topic 8
Topic 8
โค้ด Ruby ใช้ร่วมจากโฟลเดอร์ en/ ของต้นฉบับ เพื่อให้สองภาษาผูกกับชุดทดสอบเดียวกัน
ภาพรวม
ทำไมหัวข้อนี้จึงสำคัญ
Ruby เปิดทางให้เกิดพฤติกรรมตอน runtime ได้อย่างทรงพลัง แต่ในเชิงการสอน เป้าหมายของ หัวข้อนี้ไม่ได้มีแค่ความสามารถ มันรวมถึงความยับยั้งชั่งใจด้วย ผู้เรียนควรเห็นว่าทั้ง dynamic dispatch และการสร้าง method อัตโนมัติดูงามได้ และก็ควรเห็นด้วยว่าใช้เกินไปเมื่อไร โค้ดจะกลายเป็นปริศนา
สิ่งที่ผมอยากให้คุณทำได้เมื่อจบหัวข้อนี้
เมื่อจบหัวข้อนี้ คุณควรจะ:
จุดที่ผมใช้ดูความเข้าใจ
ผมอยากให้คุณอธิบายได้ว่าพฤติกรรมแบบ dynamic นี้ตอบโจทย์จริง ไม่ใช่ถูกใช้เพียงเพื่อ โชว์สไตล์
โน้ตสั้น
หัวข้อนี้คือจุดที่หลายคนเริ่มรู้สึกถึง "มนตร์" ของ Ruby แต่บทเรียนสำคัญไม่ใช่แค่ว่า Ruby ทำท่า dynamic ได้ บทเรียนสำคัญคือฟีเจอร์เหล่านี้มีค่าที่สุดเมื่อมันช่วยตัดโค้ดซ้ำ หรือช่วย ทำให้ DSL เล็ก ๆ อ่านออกชัด
จุดที่ Ruby ทำได้ดีในหัวข้อนี้:
จุดที่ต้องระวังในหัวข้อนี้:
เป็นการแลกที่ไม่คุ้ม
คำถามชวนคิด:
ตัวอย่างแบบลงมือดู
Example 1: Metrics APIs
ระบบ metrics มักเปิดชุด method ที่มีทรงเหมือนกันเป็นครอบครัว เช่น:
แบบนี้ทำให้ define_method เป็นตัวอย่างสอนที่สมเหตุสมผล เพราะความซ้ำซ้อนนั้นมีอยู่ จริง ไม่ได้ถูกสร้างขึ้นมาเพื่อโชว์เทคนิค
Example 2: DSL สำหรับสร้าง query
โค้ดสร้าง query เป็นตัวอย่างที่ดีของการใช้ Ruby แบบ dynamic เพื่อความอ่านง่าย ไม่ใช่ เพื่อความแปลกใหม่
QueryBuilder . new . where (: status , "active" ). where (: role , "admin" ) worked_examples.md ruby เหตุผลที่ตัวอย่างนี้มีประโยชน์: