Rubyのブロック構文について

概要

Rubyのブロック構文についてかく。

ブロック構文とは

他メソッドにコード断片を渡すことで、そのメソッド内で処理を実行させることができる構文。

do..endまたは{}を使って定義する。ブロックは引数を受け取ることができる。

ブロックを受け取るメソッドを定義することもできる。

また、ブロックをメソッドの引数として渡すこともできる。その場合は&を使って渡す。

to_procメソッドを持つオブジェクトもブロックとして渡すことができる。

ブロックはProcやlamdaと同じくクロージャーである。

do..end{}は結合度が異なり、{}の方が結合度が高い。

ブロックの中で単一のメソッドを呼び出す場合に限り、ブロックをシンボルで置き換えることができる。シンボルにはto_procメソッド(Symbol#to_proc)が実装されている。

do..end{}の使い分けとしては、次のような考え方がある。

  • 複数行の場合はdo..end
  • 一行の場合は{}
  • 値を返す式として使う場合は{}
  • 手続きを渡す場合はdo..end

コーディング規約に依る部分もあるので、あくまで一例として考えておきたい。

参考