Rubyのyieldって何?yieldの使い方

Rubyのyieldの使い方について、しっくり頭に入ってこなかったので記事に書きます!

使い方としては以下の通りです。

 

yieldを使うと、メソッド名 do ~ endの間の処理がそのまま入るようになります。

def week
    puts '平日'
    puts '週末'
    yield # <- do end の間の処理(puts '一週間')が入る 
end

week do 
    puts '一週間' 
end 
# => 平日
# => 週末
# => 一週間

yieldを2回使った場合は以下のとおりです。

def week2nd
    puts '平日'
    puts '週末'
    yield
    yield
end

week2nd do
    puts '一週間'
end
# => 平日
# => 週末
# => 一週間
# => 一週間

do endの間の処理が2回出力されていますね!

ただし、yieldを使っている場合、do endで値を渡さないとエラーになってしまいます。

week2nd # => ERROR `week2nd': no block given (yield)

その場合は、if block_given?で確認してみましょう。

def week3rd
    puts '平日'
    puts '週末'
    if block_given?
        yield
    end
end

week3rd
# => 平日
# => 週末

これだとエラーがでないですね!

 

また、yieldに引数を渡すことができます。

以下の場合は’一週間’と引数に入れてみます。

week4thを読んだ時、引数の文字列を返すとputs textでputs ‘一週間’というようになります。

また、引数を多く指定した場合はnilと判断されます。

def week4th
    puts '平日'
    puts '週末'
    text = yield '一週間'
    puts text
end

week4th do |string|
    string
end
# => 平日
# => 週末
# => 一週間

week4th do |text, num|
    text + num.inspect
end
# => 平日
# => 週末
# => 一週間nil

yieldはどこで使えるの?と思いますが、

一部共通処理、一部違う処理の場合に使えそうですね!

 

何か参考になれば幸いです(*^^*)