アトトック代表の開発ブログ

プログラミングや会社のこと、写真、自転車のことなど書いてます。

Rubyのブロック付きのメソッド

Rubyでブロック付きのメソッドをメソッドを作ってみます。

def func(value1, value2)
  puts "value1 : #{value1}, value2 : #{value2}"
  a = value1 + value2
  b = value1 - value2
  c = value1 * value2
  d = value1 / value2
  yield(a, b, c, d) if block_given?
  return a, b, c, d
end

puts 'メソッドをブロック付きで実行'
func(1, 2) do |a1, b1, c1, d1|
  puts "a1 : #{a1}"
  puts "b1 : #{b1}"
  puts "c1 : #{c1}"
  puts "d1 : #{d1}"
end

puts 'メソッドをブロックなしで実行'
a2,b2,c2,d2 = func(10, 20)
puts "a2 : #{a2}"
puts "b2 : #{b2}"
puts "c2 : #{c2}"
puts "d2 : #{d2}"

yieldは、定義したブロック付きメソッドでブロックを呼び出します。

block_given?は、メソッドにブロックがあればtrueを返します。

実行結果

メソッドをブロック付きで実行
value1 : 1, value2 : 2
a1 : 3
b1 : -1
c1 : 2
d1 : 0
メソッドをブロックなしで実行
value1 : 10, value2 : 20
a2 : 30
b2 : -10
c2 : 200
d2 : 0