Il existe deux styles courants pour choisir do end
ou { }
pour les blocs dans Ruby:
Le premier style très courant a été popularisé par Ruby on Rails, et est basé sur une règle simple de simple vs multi-ligne:
- Utiliser des accolades
{ }
pour les blocs sur une seule ligne
- Utiliser
do end
pour les blocs multilignes
Cela a du sens car do / end se lit mal dans un one-liner, mais pour les blocs multi-lignes, laisser une fermeture }
suspendue sur sa propre ligne est incompatible avec tout ce qui utilise end
dans ruby, comme les définitions de module, de classe et de méthode ( def
etc. .) et des structures de commande ( if
, while
,case
, etc.)
Le deuxième style, moins fréquemment vu, est connu sous le nom de sémantique, ou " Weirich Braces ", proposé par le regretté grand rubisiste Jim Weirich:
- Utiliser
do end
pour les blocs procéduraux
- Utiliser des accolades
{ }
pour les blocs fonctionnels
Cela signifie que lorsque le bloc est évalué pour sa valeur de retour , il doit être chaînable et les {}
accolades ont plus de sens pour le chaînage de méthodes.
D'un autre côté, lorsque le bloc est évalué pour ses effets secondaires , alors la valeur de retour n'a aucune conséquence, et le bloc "fait" simplement quelque chose, donc cela n'a pas de sens d'être enchaîné.
Cette distinction dans la syntaxe donne une signification visuelle à l'évaluation du bloc et indique si vous devez ou non vous soucier de sa valeur de retour.
Par exemple, ici, la valeur de retour du bloc est appliquée à chaque élément:
items.map { |i| i.upcase }
Cependant, ici, il n'utilise pas la valeur de retour du bloc. Il est de fonctionnement de la procédure, et faire un effet secondaire avec elle:
items.each do |item|
puts item
end
Un autre avantage du style sémantique est que vous n'avez pas besoin de changer d'accolades pour faire / terminer simplement parce qu'une ligne a été ajoutée au bloc.
En guise d' observation, les blocs fonctionnels par coïncidence sont souvent une seule ligne, et les blocs procéduraux (par exemple config) sont multilignes. Ainsi, suivre le style Weirich finit par ressembler presque au style Rails.