0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

procとは?

Posted at

procとは?

procとは、ブロックをオブジェクト化したものを指します。

ブロックとは

そもそもブロックとは、do~endや{~})で囲まれたカタマリです。
1行の場合はdoブロックではなく{~}を使用します(以下の例では分かりやすいように一行で書けるコードもdoブロックで書いています。)

例1
numbers.each do |number|
  number*2
end

例2
numbers.each {|number| number*2}

ブロックの呼び出し方

で、このブロックはいくつかの呼び出し方があります。

callメソッドの場合

まずは一番基本形の形です。
ブロックを受け取るメソッドであることを引数"&block"で明示しています。
ちなに、この&というのはブロックをprocオブジェクトに変換しています。

#ブロックを受け取るメソッド
def certain_block(&block)
  block.call
end

#メソッドの引数としてブロックを渡し、実行する
certain_block do
  p "Hello, block!"
end
=> "Hello, block!"

ブロック引数を渡し、yieldする場合

次に、ブロックをcallメソッドで呼び出す代わりに、"yield"を使用する場合です。
引数は"&block"のままです。

#ブロックを受け取るメソッド
def certain_block(&block)
  yield
end

#メソッドの引数としてブロックを渡し、実行する
certain_block do
  p "HelloWorld"
end
=> "HelloWorld"   

ブロック引数を省略し、yieldする場合

で、次のパターンはなんと、引数の&blockを省略できます。
このパターンで書くことが多い気がしますが、基本形からこのような形になっていることは押さえておくと良いと思います。

#ブロックを受け取るメソッド
def certain_block
  yield
end

#メソッドの引数としてブロックを渡し、実行する
certain_block do
  p "HelloWorld"
end
=> "HelloWorld"   
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?