平々凡々エンジニア

平凡で難しい悩みを解決

Procとは?

なんとなく触りでProcについてわかったので簡単かつ完結にProcをまとめて見たいと思います。

前提知識として必要なのはブロックとyield どちらも簡単に解説します。

  • ブロックとは
    • 記載の仕方はdo 処理内容 end または {処理内容}
    • 引数の内容を記述したもの
    • 単体では存在できない(必ずクラスなどの中に存在する)
    • メソッドの引数にしかなれない
    • 引数として渡したブロックはyieldによって実行する
# メソッドを定義する
# 引数の&blockは引数がブロックの場合Procオブジェクトに変換する
def coll_block(&block)
  block.coll
end

# 実行
coll_block do 
  p "Hello!!"
end


  • Procとは
    • ブロックをオブジェクト化(メモリーにロードして実行可能状態に)したもの
    • ブロック引数は一つしか渡せない(仮引数の中で一番最後に定義してはいけない)
    • Prockはcallメソッドで呼べる

ブロック引数は1つしか渡せないことから引数の省略
def coll_block(&block)からdef coll_block

ブロック引数を省略したことから引数を実行する為のメソッドを使用する
&blockからyield

となるので以下のようにかけるようになる


def coll_block
  yield
end

# cll_blockメソッドにブロック(do~end)を引数として実行する
coll_block do
 p "Hello!!"
end

=> "hello!!"
  • prockの需要
  • メソッドの拡張性を広げる
  • クロージャとして作ることができる

次回はクロージャをまとめて見ます