`{ ... }` と `do ... end` の違いと使い分けるべきシーン

ブロック付きメソッド呼び出しを記述する際には { ... } あるいは do ... end を使うと思います。 しかしこれらは厳密にいうと異なります。 その違いは 結合強度 です。

{ ... } の場合

some_method other_method { ... }

この式は次のように解釈されます。

some_method(other_method{ ... })

do ... end の場合

some_method other_method do ... end

この式は次のように解釈されます。

some_method(other_method) do ... end

使い分けるべきシーン

{ ... } を使うべき

  • メソッドの戻り値を利用する場合
  • メソッドチェーン(a.foo{}.bar{}.baz{})をする場合
  • 1行で記述できる場合

do ... end を使うべき

  • 上記以外の場合、基本こちらを使うべき。

Ref.