มีสองสไตล์ทั่วไปสำหรับการเลือกdo end
เทียบกับ{ }
บล็อกใน Ruby:
รูปแบบแรกและแบบทั่วไปได้รับความนิยมโดย Ruby on Rails และเป็นไปตามกฎง่ายๆของ single vs. multi-line:
- ใช้วงเล็บปีกกา
{ }
สำหรับบล็อกบรรทัดเดียว
- ใช้
do end
สำหรับบล็อกหลายบรรทัด
สิ่งนี้สมเหตุสมผลเพราะ do / end อ่านได้ไม่ดีใน one-liner แต่สำหรับบล็อกหลายบรรทัดการปล่อยให้การปิด}
ห้อยอยู่บนบรรทัดของตัวเองนั้นไม่สอดคล้องกับสิ่งอื่น ๆ ที่ใช้end
ในทับทิมเช่นคำจำกัดความของโมดูลคลาสและวิธีการ ( def
ฯลฯ .) และโครงสร้างการควบคุม ( if
, while
, case
ฯลฯ )
รูปแบบที่สองที่ไม่ค่อยพบเห็นบ่อยนักเรียกว่าความหมายหรือ "วีริชจัดฟัน " ซึ่งเสนอโดยจิมไวริชนักทับทิมผู้ล่วงลับผู้ยิ่งใหญ่:
- ใช้
do end
สำหรับบล็อกขั้นตอน
- ใช้วงเล็บปีกกา
{ }
สำหรับบล็อกที่ใช้งานได้
ซึ่งหมายความว่าเมื่อบล็อกได้รับการประเมินมูลค่าที่ส่งคืนแล้วควรเป็นแบบ chainable และ{}
วงเล็บปีกกามีความหมายมากกว่าสำหรับการผูกมัดวิธีการ
ในทางกลับกันเมื่อบล็อกได้รับการประเมินผลข้างเคียงแล้วมูลค่าที่ส่งคืนจะไม่มีผลใด ๆ และบล็อกเป็นเพียงการ "ทำ" บางสิ่งบางอย่างดังนั้นจึงไม่สมเหตุสมผลที่จะถูกล่ามโซ่
ความแตกต่างในไวยากรณ์นี้บ่งบอกถึงความหมายที่เป็นภาพเกี่ยวกับการประเมินผลของบล็อกและคุณควรสนใจเกี่ยวกับค่าที่ส่งคืนหรือไม่
ตัวอย่างเช่นที่นี่ค่าส่งคืนของบล็อกจะถูกนำไปใช้กับทุกรายการ:
items.map { |i| i.upcase }
อย่างไรก็ตามในที่นี้จะไม่ใช้ค่าส่งคืนของบล็อก มันดำเนินการตามขั้นตอนและทำผลข้างเคียงกับมัน:
items.each do |item|
puts item
end
ข้อดีอีกอย่างของรูปแบบความหมายคือคุณไม่จำเป็นต้องเปลี่ยนเครื่องหมายวงเล็บเพื่อทำ / สิ้นสุดเพียงเพราะมีการเพิ่มบรรทัดลงในบล็อก
ตามข้อสังเกตบล็อกการทำงานโดยบังเอิญมักเป็นแบบซับเดียวและบล็อกขั้นตอน (เช่น config) เป็นแบบหลายบรรทัด ดังนั้นการทำตามสไตล์ Weirich จะดูเหมือนเกือบจะเหมือนกับสไตล์ Rails