Ruby メソッド Proc Lambda について

Ruby メソッド Proc Lambda について

下記の書籍を参考に記事を作成しました。
プログラミング言語 Ruby

 

メソッド

メソッド名は、likeThisのように定義するのではなく、
like_thisのようにアンダースコアを使うのが習慣となっています。
また、カッコを省略することもできます。

使い方は皆さんご存知下記のとおりです。

またデフォルトの引数も指定することができます。

 

ブロック

do … end{ … } で囲まれた塊のことです。

サンプルは下記の通りです。

メソッド呼び出しにおける &

メソッド呼び出しの際に&が定義されている場合、&についているブロック(&block)をProcオブジェクトとしてメソッド内で扱うことができる。

 

Proc

ブロックはオブジェクトではないため、変数に入れたりすることができない。
これだとなにかと不便なのでということでProcが登場します。

Procは、ブロックをオブジェクトとして表現したもので、
Procオブジェクトはcallで元のブロックのコードを呼び出すことができます。

また、Procオブジェクトを表現するための方法が2つあり、Proc.newと下記で説明するlambdaになります。

 

lambda

Procとほぼ同じような認識でいます。違いは下記で書いています。
書き方は下記の通り。

少し省略した書き方はこちら。

 

Procとlambdaの違い

return

Proc
returnが書かれているところでメソッドを抜ける
return以降の処理は実行されない

lambda
return以降の処理も実行される

引数

Proc
引数の数は気にしない

lambda
引数の数は厳格にみる。間違っていれば、エラーをはく

 

参考にした記事

Rubyのブロック、Proc、Lambdaって何?
Rubyの ブロック、Proc.new、lambdaの違い
Procを制する者がRubyを制す(嘘)