概要
Rubyのブロック構文についてかく。
ブロック構文とは
他メソッドにコード断片を渡すことで、そのメソッド内で処理を実行させることができる構文。
do..endまたは{}を使って定義する。ブロックは引数を受け取ることができる。
ブロックを受け取るメソッドを定義することもできる。
また、ブロックをメソッドの引数として渡すこともできる。その場合は&を使って渡す。
to_procメソッドを持つオブジェクトもブロックとして渡すことができる。
ブロックはProcやlamdaと同じくクロージャーである。
do..endと{}は結合度が異なり、{}の方が結合度が高い。
ブロックの中で単一のメソッドを呼び出す場合に限り、ブロックをシンボルで置き換えることができる。シンボルにはto_procメソッド(Symbol#to_proc)が実装されている。
do..endと{}の使い分けとしては、次のような考え方がある。
- 複数行の場合は
do..end - 一行の場合は
{} - 値を返す式として使う場合は
{} - 手続きを渡す場合は
do..end
コーディング規約に依る部分もあるので、あくまで一例として考えておきたい。
参考
- docs.ruby-lang.org - メソッド呼び出し(super・ブロック付き・yield)
- style.potepan.com - Rubyにおけるブロック構文(do~end)の使い方
- obelisk.hatenablog.com - Ruby のブロックはクロージャである
- qiita.com - Rubyをやっていてブロック処理(do 〜 end)がちゃんとわかってない人は、怒らないから見ていきなさい
- zenn.dev - 【Ruby】 do...end と {...}の違いでハマった
- mickey24.hatenablog.com - Rubyのブロック構文の書き分け(do end,{})
- Ruby のブロックをちゃんと理解する
- active.nikkeibp.co.jp - Ruby開発者のまつもとゆきひろが深く解説、「ブロック構文」発想の経緯
- musclecoding.com -【Ruby】「ブロック」を初心者向けにとにかく丁寧に解説!ブロック変数とは?