ブロックの使い方
Rubyを勉強していて一番につまずいたのはこのブロックというやつ。
javaをずっとやっていたせいか、どうもこのブロックという概念が掴みにくい。
そこで少し調べて見て、以下の内容にまとめてみた。
- とりあえずブロックとは?
ブロックは二言で言えば「コードの塊」そして「オブジェクトじゃない」
- メソッドから渡されたブロックの利用方法
・明示的にメソッドにブロック引数の宣言をする。
def func (&block) block.call end # funcを実行 func do p "sample" end
・引数の宣言をしないで、yieldのみを宣言
def func yield end # funcを実行 func do p "sample" end
- それぞれのメリット
・引数の宣言をする場合
1.ブロックを処理していることが明確に表現できる
2.ブロックもオブジェクトとして統一的に扱える
3.ブロック引数がnilかどうかを調べるだけで、ブロックが与えられているかどうかを判別できる
・yieldを宣言する場合
1.ブロック割り当てが行われないので現在の実装上では少しだけ高速
2.エラー・メッセージが分かりやすい