Rubyのyield(ブロック呼び出し)とは?ブロックの使い方と柔軟なメソッド設計
Rubyでは、メソッドに渡されたブロック(処理のかたまり)を実行するために、yield
というキーワードを使います。
これにより、メソッドの中で柔軟な処理を呼び出すことができます。
基本構文
def greeting
puts "こんにちは!"
yield
puts "また来てね!"
end
greeting { puts "ブロックの中です" }
この例では、yield
により、greeting
メソッドに渡されたブロックが呼び出されます。
引数を渡す
def repeat_three_times
3.times do |i|
yield(i)
end
end
repeat_three_times do |n|
puts "#{n}回目の呼び出し"
end
yield(引数)
とすることで、ブロックに引数を渡すことができます。
ブロックが渡されているか確認(block_given?)
def safe_call
if block_given?
yield
else
puts "ブロックがありません"
end
end
safe_call # → ブロックがありません
safe_call { puts "あります" } # → あります
block_given?
は、ブロックが与えられているかどうかを確認するメソッドです。
yield の使いどころ
- 繰り返し処理を任意の処理でカスタマイズしたいとき
- 処理の前後に共通の処理を挟みたいとき
- コールバック的な使い方をしたいとき
例:共通処理を囲む
def with_logging
puts "処理開始"
yield
puts "処理終了"
end
with_logging { puts "データを更新中..." }
このように、前後の処理はメソッドで定義し、中身の処理だけをブロックで切り替えると便利です。
yield と Proc の違い
yield
は 暗黙的に渡されたブロックを呼び出すのに対し、Proc
は 明示的にオブジェクトとして渡す方法です。
def call_proc(proc)
puts "前"
proc.call
puts "後"
end
say_hello = Proc.new { puts "こんにちは!" }
call_proc(say_hello)
まとめ
Rubyの yield
は、メソッドに渡されたブロックを呼び出すシンプルな手段です。
ブロックと組み合わせることで、柔軟で再利用性の高いメソッド設計が可能になります。
また、block_given?
を使えば、安全に呼び出しを行うことができ、処理の可読性や汎用性も高まります。
まずは簡単な yield
の使い方から試してみましょう!