Ruby yieldの簡単な使い方

  • 作成日 2020.12.19
  • 更新日 2022.08.19
  • Ruby
Ruby yieldの簡単な使い方

Rubyで、yieldの簡単な使い方を記述してます。rubyのバージョンは2.7.2を使用してます。do-endでの使用方法までを記述してます。

環境

  • OS windows10 pro 64bit
  • ruby 2.7.2p137

yield使い方

rubyはyieldを使用すると、以下のようにコードブロックをyieldごとに実行することができます。

def hoge
  yield
  yield
  yield
end

hoge { p 'Hello' }

# "Hello"
# "Hello"
# "Hello"

「yield」は、以下のように順番に実行されます。

def hoge
  yield
  yield
  p 'mebee'
  yield
end

hoge { p 'Hello' }

# "Hello"
# "Hello"
# "mebee"
# "Hello"

パラメーター利用

以下のようにパラメーターを利用することも可能です。

def hoge
  yield 2, 2
  yield 3, 3
  yield 5, 3
end

hoge { |x, y| p x * y }

# 4
# 9
# 15

コードブロック確認

コードブロックが与えられているかは「p block_given?」で確認することができます。

def hoge(x,y)
  p block_given?
  return x * y
end

p hoge(3,3)
# false
# 9

p hoge(5,3){ p 'hello' }
# true
# 15

proc.call

proc.callを使用すれば、コードブロックが存在すれば、実行することが可能です。

def hoge(x,y,&proc)
  proc.call(2,3) if block_given?
  return x * y
end

p hoge(3,3)
# 9

p hoge(5,3){ |x, y| p x * y }
# 6
# 15

proc.callを、yieldに変更して、&procをなくしても同じ結果が得られます。

def hoge(x,y)
  yield 2,3 if block_given?
  return x * y
end

p hoge(3,3)
# 9

p hoge(5,3){ |x, y| p x * y }
# 6
# 15

なので、これのコードブロックがあるかの条件をなくしたものがyeildとなります。

def hoge(x,y)
  yield 2,3
  return x * y
end

p hoge(5,3){ |x, y| p x * y }
# 6
# 15

do-endを使用

一般的にyieldは、do-endを使用して実行します。

def hoge
  yield 2,3
  yield 3,3
  yield 5,3
end

hoge do |x,y|
  p x * y
end

ちなみにprocもdo-endを使用できます。

def hoge(&proc)
  proc.call(2,3)
  proc.call(3,3)
  proc.call(5,3)
end

hoge do |x,y|
  p x * y
end

# 6
# 9
# 15