Topic 2
Topic 2
โค้ด Ruby ใช้ร่วมจากโฟลเดอร์ en/ ของต้นฉบับ เพื่อให้สองภาษาผูกกับชุดทดสอบเดียวกัน
ภาพรวม
ทำไมหัวข้อนี้จึงสำคัญ
method ของ Ruby จะสั้นก็ได้ แต่ยังรองรับรูปแบบการเรียกที่ยืดหยุ่นได้ด้วย Keyword arguments ช่วยให้จุดเรียก method สื่อความหมาย ส่วน blocks ช่วยให้คนเรียกส่ง พฤติกรรมเล็ก ๆ เข้ามาได้โดยไม่ต้องสร้าง callback interface ที่เต็มไปด้วยพิธีรีตอง
สิ่งที่ผมอยากให้คุณทำได้เมื่อจบหัวข้อนี้
เมื่อจบหัวข้อนี้ คุณควรจะ:
จุดที่ผมใช้ดูความเข้าใจ
ผมอยากให้คุณสร้าง API เล็ก ๆ ที่ยังอ่านง่ายทั้งสำหรับคนเขียนและคนเรียกใช้ ไม่ใช่แค่ ทำให้ชุดทดสอบผ่านเท่านั้น
โน้ตสั้น
API ที่ดีใน Ruby มักอ่านแล้วเกือบจะเหมือนประโยคหนึ่งประโยค Keyword arguments ช่วย ให้คนเรียกเข้าใจความหมายได้โดยไม่ต้องเปิดเข้าไปดูใน method body ส่วน blocks ช่วยให้ คนเรียกส่งพฤติกรรมเล็ก ๆ เข้ามาได้ โดยไม่ต้องสร้างโครงหนัก ๆ มารองรับ
สำหรับคนที่มาจาก Java นี่เป็นความต่างที่สำคัญ ใน Java ความยืดหยุ่นมักพาไปสู่ type ที่มากขึ้น overload ที่มากขึ้น หรือโครงประกอบที่มากขึ้น แต่ใน Ruby ภาษาจะชวนให้เรา ทำจุดเรียก method ให้เล็ก กระชับ และสื่อความหมาย
จุดที่ Ruby ทำได้ดีในหัวข้อนี้:
จุดที่ต้องระวังในหัวข้อนี้:
คำถามชวนคิด:
ตัวอย่างแบบลงมือดู
Example 1: API สำหรับจัดรูปแบบที่อ่านจุดเรียกได้ทันที
formatter เป็นตัวอย่าง API เล็ก ๆ ที่ดี เพราะคนเรียกมักสนใจความอ่านง่ายมากกว่าราย ละเอียดข้างใน
formatter . wrap ( "warning" , left : "(" , right : ")" ) worked_examples.md ruby แบบนี้ดีกว่าการส่งเครื่องหมายวรรคตอนแบบ positional arguments เพราะแค่มองที่จุด เรียกก็เข้าใจได้เลยว่าค่าไหนทำหน้าที่อะไร
Example 2: notification hook ที่ใช้ block
blocks เหมาะมากเมื่อ framework เป็นคนควบคุมการวนซ้ำ แต่คนเรียกเป็นคนกำหนดผล ข้างเคียงที่อยากให้เกิดขึ้น
notifier . notify_all ( users ) do |message| audit_log << message end worked_examples.md ruby เหตุผลที่ตัวอย่างนี้มีประโยชน์: