Esistono due stili comuni per la scelta dei blocchi do endrispetto a quelli { }per i blocchi in Ruby:
Il primo e molto comune stile è stato reso popolare da Ruby on Rails e si basa su una semplice regola di linea singola e multi-linea:
- Usa le parentesi graffe
{ }per i blocchi a riga singola
- Utilizzare
do endper blocchi multilinea
Questo ha senso perché do / end legge male in una riga singola, ma per i blocchi multi-riga, lasciare una chiusura }appesa su una propria riga non è coerente con tutto il resto che usa endin ruby, come le definizioni di modulo, classe e metodo ( defecc. .) e strutture di controllo ( if, while, case, etc.)
Il secondo stile, meno visto di frequente, è noto come semantico, o " parentesi graffe di Weirich ", proposto dal compianto, grande rubyist Jim Weirich:
- Utilizzare
do endper blocchi procedurali
- Usa le parentesi graffe
{ }per i blocchi funzionali
Ciò significa che quando il blocco viene valutato per il suo valore di ritorno , dovrebbe essere {}concatenabile e le parentesi graffe hanno più senso per il concatenamento dei metodi.
D'altra parte, quando il blocco viene valutato per i suoi effetti collaterali , il valore restituito non ha conseguenze e il blocco sta semplicemente "facendo" qualcosa, quindi non ha senso essere concatenato.
Questa distinzione nella sintassi trasmette un significato visivo sulla valutazione del blocco e se è necessario preoccuparsi o meno del suo valore di ritorno.
Ad esempio, qui il valore di ritorno del blocco viene applicato a ogni elemento:
items.map { |i| i.upcase }
Tuttavia, qui non viene utilizzato il valore di ritorno del blocco. Funziona in modo procedurale e produce un effetto collaterale:
items.each do |item|
puts item
end
Un altro vantaggio dello stile semantico è che non è necessario cambiare le parentesi graffe per fare / terminare solo perché è stata aggiunta una linea al blocco.
Come osservazione, casualmente i blocchi funzionali sono spesso una riga singola e i blocchi procedurali (ad esempio config) sono multilinea. Quindi, seguire lo stile Weirich finisce per sembrare quasi uguale allo stile Rails.