Rubyのyieldの引数をうまく使って効率的に書いてみよう!

Rubyのyieldについて以前も書いたのですが再度!!(*´ω`*)

yieldは未だ実作業で出会っていなくて君の魅力はなんなのだ!

ということで再記事ですw

 

魅力は

  • 特定の処理をする、しないを選択できる
  • block_given? とyield をセットで使うと魅力倍増

 

コードの例は以下の通りです。

def test
  if block_given?
    yield(1, 2)
  else
    p 'ブロックなしだよ'
  end
end

test
# => "ブロックなしだよ"
test { | a, b | p a + b }

このような感じで引数がないと変化がつけれずあまり、活かすことができません。
次のようなケースだといろいろな活用法がありそうです。

def test(type)
  if block_given?
    if type == 1
      param1 = 1
      param2 = 3
    else
      param1 = 5
      param2 = 5
    end

    yield(param1, param2)
  else
    p 'ブロックなしだよ'
  end
end

test(1)
# => "ブロックなしだよ"
test(1) { | a, b | p a + b }
# => 4
test(2) { | a, b | p a + b }
# => 10

活かし方にコツがありそうですが
何か参考になれば幸いです(*^^*)