ruby関数型プログラミング(2)yield

★yield
yieldは簡単に言うとブロックを起動せよ、と言う構文です。自分で定義したブロック付きメソッドの中で引数として受け取ったブロックを呼び出すときに使います。
yieldには値を渡せるのですが、その渡した値は、目的のブロックのブロック引数(|で囲まれたブロックの変数)に代入されます。yieldはブロック内で最後に評価した式の値を返します。

具体例は次の通りです。

# 独自のブロック付きメソッドの定義(与えられたブロックに1と2を渡して実行
def hoge
 yield(1,2)
end
# 2つのブロック引数を受け取って加算せよ、というブロックをhogeに渡して実行
hoge {|a,b|
 a + b
} # => 3

ではhogeをブロックなしで呼び出すとどうなるか?

hoge
LocalJumpError: no block given (yield)

ブロックがない、というエラーが起きます。

ブロックが渡されているかどうかをチェックするblock_given?と言うメソッドがあります。

def hoge
 if block_given?
  yield(1,2)
 end
end

これでブロックのない呼び出しのときは何もしないことになります。

このようにProcとyieldを使って、独自のブロック付きメソッドを作って、様々なブロックで呼び出すことができます。

この記事が気に入ったらサポートをしてみませんか?