Ruby と PHP の違うところ

仕事で久しぶりに PHP を使うことになった。ここ最近は PHP よりも Ruby に触れている時間が多かったため、慣れる(というか、勘を取り戻す)までに時間が掛かった。そこで、PHPRuby で違うところを挙げてみようと思い立った。ちなみに、PHP は仕事で数年の使用歴はあるが、Ruby は仕事では使ったことがなく、趣味の域を超えていないので、あまり深いところまでは突っ込めない。表面的なところをサラッとね。

違い

メソッド/プロパティへのアクセス

PHP

$obj->method();

Ruby

obj.method()

これが意外とくせ者。はじめのうちは "." とばかりタイプしていた。

Setter/Getter

PHP は Setter/Gettr をいちいち書く必要がある。もしくは、__set(), __get() メソッドの中身を実装することでも可能。メンバを public にしてしまう方法もあるが、お行儀悪い。
Ruby なら attr_(accessor|reader|writer) を使うことで簡単に書くことができる。
これはかなり大きいと思う。タイプ数も少なくて済むし、見た目もわかりやすくなると思う。

コンストラクタのメソッドチェイン

PHP はできない

new Obj()->method();

Ruby はできる

Obj.new().method()

PHP でもファクトリメソッドでオブジェクトを生成するようにすれば可能なんだろうけど、そこまでしてやることでもないと思う。でも Ruby のようにできると便利。

正規表現

PHP には正規表現の関数群が3つある(preg, ereg, mb_ereg)。なんで3つもあるのかしらん。田中哲スペシャルを使いたいときは mb_ereg を使えばいいのかしらん(当然マルチバイトのときも)。ereg は … ってマニュアルみたら PHP 6.0 からは削除されちゃうのね。preg はいつもお世話になっています。
その点 Ruby正規表現は一つだけなので迷う必要はない。正規表現エンジンも鬼車なので田中哲スペシャルも使い放題。実際のところ田中哲スペシャルを使う機会は少ないんだけど。というか、試しで使ったことがあるだけで、本番のロジックに組み込んだことはない。

で、どうよ

この他にも違いは多々あるけれど、ここ最近の開発で思ったのはこんなところ。使っていて思ったのは Ruby の方が楽に書けるということ。昔は C をやっていた。そこから PHP に移ったときに、なんて楽なんだと思ったが、Ruby の方がさらに楽だった。まぁ、楽に書ける言語が一番優れているかというとそうでもないわけで。適材適所ってやつですな。
ただ、PHPRuby 好きな方で書いていいよといわれたら Ruby を選ぶだろうな。