【ruby】yieldとブロックの関係

yield

メソッドの中でyieldを実行すると、受け取ったブロックを実行します。

コード例

ブロックとは method do |ブロック変数| ~ end で囲われている処理のことです。

yieldをわかりやすく明記するためにブロック変数を省略した形で書いてみました。

@count = 1

def yield_test
  puts @count # a
  @count += 1 
  yield       # b
  puts @count # c
end

#ブロック
yield_test do #yield_test実行 → a b cの順に実行される
  puts @count #b yieldからブロック処理実行
  @count += 1 #c @countを1増やされる。
end

#1,2,3と出力

yield処理を入れた際はブロック処理をmehodに追加することが出来ます。 追加処理を入れる際、便利な気がします。

ちなみにブロックが渡されたか判別するのは block_given? methodを用います。

@count = 1

def yield_test
  puts @count # a
  @count += 1 
  yield if bloc_given? # true→yield実行 今回はfalseなので実行されない
  puts @count # c
end

#ブロック
yield_test

#1,2と出力