Rubyはじめ

Rubyを使い始めて1週間。文法は覚えて一通り文字列処理とか日本語処理もできるようになったところです。スクリプト言語なんてどれもこれも似通ったものだなと思いつつも、ちょっと肩透かしを食らった部分について。


Rubyでは関数にブロックを食わせることができて、特に数値型にはtimes、each、downtoやuptoというメソッドが用意されています。それぞれ以下のようなブロックを取ることができて、特定の回数ブロックの中身を繰り返すという処理を実現することができます。

def foo(n)
  n.times(){ |i|
    print i
  }
end

foo(5) => 01234

初めてこれを見たときはなんて気持ち悪い構文だろうと感じました。中括弧{}の後に|i|を付けるなんて微妙な記法だなというのもありましたが、それよりなにより中括弧を使うかdo〜endを使うかはっきりしてくれ!と。


しかし、構文なんてのは結局慣れなので1000行くらい書いてるうちに気持ちよくなってくるのだろうと思っていたのもつかの間。times,each系の構文もdo〜endブロックを取れることがわかりました。

def foo(n)
  n.times() do |i|
    print i
  end
end

foo(5) => 01234

ああ、これですっ!この統一感っ!
これを確認してようやくなんの憂いも無くRubyと付き合っていける気になったのであります。しかし、どうして中括弧でブロックを取ることを実装したのでしょう?そして、どうしてdefやif文では中括弧ブロックが使えない実装にしたのでしょう?


気になりますがとりあえずRailsで動くアプリケーションを作りましょう。