技術ブログ

(技術系中心)基本自分用備忘録なので、あくまで参考程度でお願いします。

Rubyでブロック作るときの{}とdo endは何が違う?

Rubyでブロック作るときの{}とdo endは何が違う?

Rubyでブロックを作る時に以下のように2通りでブロックを作成することができます。

numbers.each do|n|
  sum+=n
end
numbers.each{ |n|
  sum+=n
}

この違いは?

・改行を含む長いブロックを書く場合はdo...end
・1行でコンパクトに書きたいときは{}

参考本:伊藤 淳一. プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発デバッグ技法まで

結合度が違う

do...endよりも{}のほうが結合度が強い、という点に注意が必要です。 この結合度が強いという思わぬバグを生むことがあります。 例)

a.delete100{'hoge'}
=>SyntaxError

なぜならこう判断されている

100{'hoge'}