Hyurakuのエンジニア日誌

SE出身Webエンジニアのブログ

rubyのメソッド呼び出しの一つであるyieldが気になったので調べてみた。#5

最近Rubyのコードを読んでいる時にyieldが使用されていたので、 yieldの用法を振り返る。

1. yield

公式ガイドより参照。

自分で定義したブロック付きメソッドでブロックを呼び出すときに使います。
引数をブロックパラメータとして渡してブロックを評価します。

読んだだけだとあまり理解できなかったでの実際にコードを書いてみた。

2. 実際に書いてみた

次のコードを書いてみた。

def foo
  yield(10,20)
end

foo {|a,b|
  p [a, b]
  p a + b + 30
  p a * b
}

結果は次のようになった。

>ruby ~/projects/index.rb
[10, 20]
60
200

このコードは次の流れで実行されている。

  • fooメソッドでは与えられたブロック(手続き)に引数10, 20を渡して実行することを定義している。 このとき手続き自体は決められてはいない。
  • 次にfooに2つの引数の手続きをしている。 具体的にはaに10を、bに20を代入している。
  • その後2つの引数に対して、各指定された働きをしている。 具体的には2つの引数を配列にくくっての表示させたり、 足し算や掛け算をしている。

3 まとめ

yieldが使われているメソッド内では引数を確認し、 実際の関数でどのように引数を働かせているのを確認するのがよいかと考えます。 yieldだけよんでもわかりにくいだけかもれしれない。