perlからrubyへ

ずっとperlやっていて、ちょっとrubyを書いたときには、

  1. 行末にセミコロン(;)をつけてしまう(個人的にはセミコロン症候群と言っています)
  2. 変数を$からはじめてしまう。
  3. String#to_i,Integer#to_sを忘れてしまう。

ことがある。

とくにString#to_iは、perlでは変数を数値または文字列として、各評価式でそのうちのどちらかで判断してくれるわけで、これに慣れきっているとこうなるわけだ。

$ irb
irb(main):001:0> a = '000000'
=> "000000"
irb(main):002:0> print a.to_i
0=> nil
irb(main):003:0> print "yes\n" if a < 200000
ArgumentError: comparison of String with 200000 failed
        from (irb):3:in `<'
        from (irb):3
        from :0
irb(main):004:0>

まあ、rubyでは、該当するオブジェクトがStringクラスなのか、Integer,Floatクラスかを認識しているのだろうから仕方がないのだけれど。

自動で判断する、ちゃんとクラスを認識しているのはどちらも一長一短があるのでどちらがいいとはいえないですね。