選択するための2つの一般的なスタイルがありますdo end
対{ }
Rubyでのブロックのためには:
最初の非常に一般的なスタイルはRuby on Railsによって一般化され、単一行と複数行の単純なルールに基づいています。
{ }
単一行ブロックには中括弧を使用します
do end
複数行ブロックに使用
これは理にかなっています。do/ endは1ライナーでひどく読み取りますが、複数行ブロックの場合、}
それ自体の行にぶら下がっているままにすることはend
、モジュール、クラス、メソッド定義などのルビで使用する他のすべてのものと矛盾します(def
など) 。)と制御構造(if
、while
、case
、等)
あまり頻繁に見られない2番目のスタイルは、セマンティック、または「ワイリッヒブレース」として知られています。
do end
手続き型ブロックに使用
{ }
機能ブロックに中括弧を使用する
これは、ブロックがその戻り値について評価されるとき、それは{}
連鎖可能であるべきであり、中括弧はメソッド連鎖にとってより意味があることを意味します。
一方、その副作用についてブロックが評価される場合、戻り値は重要ではなく、ブロックは何かを「実行」しているだけなので、連鎖しても意味がありません。
構文のこの違いは、ブロックの評価に関する視覚的な意味と、その戻り値を気にする必要があるかどうかを伝えます。
たとえば、ここではブロックの戻り値がすべてのアイテムに適用されます。
items.map { |i| i.upcase }
ただし、ここではブロックの戻り値を使用していません。それは手続き的に動作しており、それを使って副作用があります:
items.each do |item|
puts item
end
セマンティックスタイルのもう1つの利点は、ブロックに行が追加されたからといって、中括弧をdo / endに変更する必要がないことです。
観察として、偶然に機能するブロックはしばしば1行であり、手続き型ブロック(configなど)は複数行です。したがって、Weirichスタイルに従うと、Railsスタイルとほとんど同じように見えます。