Ruby

【Ruby】yieldとは?使い方と実践的な活用シーンを解説!

※当サイトではアフィリエイトプログラムを利用して商品を紹介しています。

コード

ひでまる
ひでまる
こんにちは!ひでまるです!
今回はRubyのyieldついて学習していくよ!

こんな方におすすめ

  • Rubyを学習している人
  • yield理解したい人

 

現場でRubyを使って開発しているので、個人の勉強記録として残します。

 

「yield」とは?

自分で定義したブロック付きメソッドでブロックを呼び出すときに使います。 yield に渡された値はブロック記法において | と | の間にはさまれた変数(ブロックパラメータ)に代入されます。

引用:Rubyリファレンスマニュアル

簡単に言うと、yield は、メソッドの中でブロック(do ... end{ ... } で囲まれた処理)を実行するための特別なキーワードになります。

また、yield に値を渡すと、その値はブロックの中で || の間に書いた変数(ブロックパラメータ)に入ります。

 

言葉ではイメージしにくいので実際にコードを見ていきます。

# ブロック付きメソッドの定義
def foo
  yield(1,2)
end
# fooに「2引数手続き、その働きは引数を配列に括ってpで印字する」というものを渡して実行させる
foo {|a,b|
  p [a, b]
}  # => [1, 2] (要するに p [1, 2] を実行した)

step
1
foo メソッドの定義

# ブロック付きメソッドの定義
def foo
  yield(1,2)
end
  • foo メソッドは、ブロックを受け取るメソッドになっている。
  • yield(1, 2) によって、渡されたブロックに 12 を渡す。

step
2
foo メソッドの呼び出し

foo { |a, b| p [a, b] }
  • foo を呼び出すとき、{ |a, b| p [a, b] } というブロックを渡す。
  • ここで |a, b|ブロックの引数 となる。

step
3
yield(1, 2) により、ブロックが実行される

  • yield(1, 2) の部分が実行されると、ブロック { |a, b| p [a, b] } が実行される。
  • yield(1, 2)1a に、2b に代入される。

step
4
p [1, 2] が実行される

  • p は配列 [1, 2] を出力する。
  • そのため、結果として [1, 2] が表示される。

どんなときに「yield」は使えるのか?

yield は、共通処理のカスタマイズ に役立ちます。
特に、メソッドの前後に共通の処理を入れたい場合 に便利です。

例:処理の開始と終了を記録し、実行時間を測定する

measure_time メソッドでは、処理の実行時間を測る仕組みを共通化できます。

def measure_time
  start_time = Time.now
  yield
  end_time = Time.now
  puts "処理時間: #{end_time - start_time} 秒"
end

measure_time do
  sleep(2) # 2秒間の処理をシミュレーション
  puts "データ処理完了"
end

◎結果
データ処理完了
処理時間: 2.0 秒

このように、measure_timeメソッドを呼び出したときに、渡すブロックによって内容が変わるので、処理時間を測定するというメソッドを共通化することができます。

おわりに

今回はyieldについて学習してみました。
少しでも学習のお役に立てれば幸いです。

 

参考記事

Ruby 3.4 リファレンスマニュアル

Rubyのyieldを使いこなす

-Ruby