Esistono due stili comuni per la scelta dei blocchi do end
rispetto 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 end
per 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 end
in ruby, come le definizioni di modulo, classe e metodo ( def
ecc. .) 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 end
per 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.