技術開発日記

技術やら日々思ったことを綴ってます。

ブロックの使い方

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.エラー・メッセージが分かりやすい