Ada dua gaya umum untuk memilih do endvs. { }untuk blok di Ruby:
Gaya pertama dan paling umum dipopulerkan oleh Ruby on Rails, dan didasarkan pada aturan sederhana antara satu baris vs. banyak baris:
- Gunakan kawat gigi
{ }untuk blok garis tunggal
- Gunakan
do enduntuk blok multi-baris
Ini masuk akal karena do / end terbaca buruk dalam satu baris, tetapi untuk blok multi-baris, membiarkan penutup }tergantung pada barisnya sendiri tidak konsisten dengan semua hal lain yang digunakan enddi ruby, seperti definisi modul, kelas & metode ( defdll. .) dan struktur kontrol ( if, while, case, dll)
Gaya kedua, yang lebih jarang terlihat dikenal sebagai semantik, atau " Weirich Braces ", yang diusulkan oleh almarhum, ahli ruby hebat Jim Weirich:
- Gunakan
do enduntuk blok prosedural
- Gunakan kawat gigi
{ }untuk blok fungsional
Ini berarti bahwa ketika blok dievaluasi untuk nilai kembaliannya , blok tersebut harus dapat dirantai, dan tanda {}kurung kurawal lebih masuk akal untuk rangkaian metode.
Di sisi lain, ketika blok dievaluasi untuk efek sampingnya , maka nilai kembali tidak ada konsekuensinya, dan blok hanya "melakukan" sesuatu, jadi tidak masuk akal untuk dirantai.
Perbedaan dalam sintaks ini menyampaikan makna visual tentang evaluasi blok, dan apakah Anda harus peduli dengan nilai kembaliannya atau tidak.
Misalnya, di sini nilai kembali dari blok tersebut diterapkan ke setiap item:
items.map { |i| i.upcase }
Namun, di sini tidak menggunakan nilai kembali blok tersebut. Ini beroperasi secara prosedural, dan melakukan efek samping dengannya:
items.each do |item|
puts item
end
Manfaat lain dari gaya semantik adalah Anda tidak perlu mengganti tanda kurung untuk melakukan / mengakhiri hanya karena garis telah ditambahkan ke blok.
Sebagai pengamatan, blok yang berfungsi secara kebetulan sering kali merupakan satu baris, dan blok prosedural (misalnya config) adalah multi-baris. Jadi, mengikuti gaya Weirich akhirnya terlihat hampir sama dengan gaya Rails.