Rubyを使い始めて1年とコードの質の変化

Rubyを使い始めて1年が経ったが、PHPの頃と比べて明らかに大きな変化が2つあった

  • バグが減った

バグが減った要因として Rubyは暗黙の型変換が禁止されているので 例えば

  1 + '1'

Rubyでは構文エラーになる。一方PHPの場合は

<?php 1 + '1' ?>

は暗黙の型変換が行われて、2になる。これは便利な場合もあるが、自分のコーディングミスで意図しない型変換が行われていても、気がつかずバグとして露呈する場合があった。また PHP は == 演算子がいまいち使えなかったり、isset() や is_null()の挙動も正しく理解しないとバグを生みやすい。

  • コーディングの速度が上がった

コーディングの速度が上がった理由としては、array を [] と書けたり if 修飾子の存在も大きいが、一番大きいのはマニュアルを引く回数が減ったことだと思う。PHPのリファレンスは何度引いても覚えないのに、Rubyのリファレンスは不思議と1度引くと覚えてしまう。たぶん設計思想が一貫しているからだと思う。


ただ PHPではあまり遭遇しなかったバグに遭うこともある。一番多いのは nilのオブジェクトに対してオブジェクトのインスタンスメソッドを使用してしまう場合である。例えば配列から偶数を取り除き一番大きな数の二倍を求めるとき

  v =  [1,2,3,4].reject{|v| v % 2 == 0}.sort.last
  v * v

とついこんなコードを書いてしまう。まあこれは極端な例だけど Hash.key? で存在を確かめたり nil? で値があるかを確かめたりするのを結構忘れてしまい、ユニットテストをすり抜けてバグになる場合がある。他には、関数を nilで返したのに つい false と比較していしまうとか。まーこの辺は心構えとテストで充分回避できる問題だとは思うけど。

Rubyは書いてて楽しいし、大好きだけど、Rubyより便利なものが出てきたらすぐ乗り換えたいとも思っている。またPHPは設置が容易だったり、大げさすぎないので簡単なCGIなどはPHPで書く場合も多い