PHP書きが久しぶりにRubyの言語仕様を詳しく思い出して抱いた感想たち

by @dekokun on 2013/12/15 20:47

Tagged as: Ruby.

どうも、パーフェクトRuby Advent Calendar 2013の15日目の記事です。

昨日は@Shindo200-> { “Perfect Ruby Advent Calendar” }.callでしたね。

昨日はPHPのアドベントカレンダーを書き、今日はRuby系のアドベントカレンダーを書く、因果なものですね。

私とパーフェクトRubyの因縁

上記のようなツイートをしておきながらずっとパーフェクトRubyを買ってなかったのですが、パーフェクトRubyアドベントカレンダーが存在すると聞いて買ってみたのでした。

その後、会社の行き帰りで頭から読んでいたのですが、残念ながら全部読み終われませんでした。具体的には、5章まで(1/3もいってない!!!)しか読めませんでした。ですので、5章までで、普段書いているPHPとくらべて、面白いなぁと思ったところを記載します。

本題

なお、以下にはパーフェクトRubyのページ数も記載していますが、これは初版の際のページ数です。

定数の再代入(p49)

  • 再代入可能というのは面白いんですが、なぜそんな設計にしたんでしたっけ。再代入可能なことによってどのような利点があるんですかね。

モジュール(p57)

  • PHPでいうところの、traitと名前空間を組み合わせたようなものですね
  • 昔はPHPにはtraitも名前空間もなく、単一継承のみ可能な言語であったためRubyのモジュールがうらやましかったのですが、最近はtraitや名前空間が出てきて、PHPもいい感じですね

%記法(p62)

  • 純粋に便利。Chefのレシピ書く際にも非常にお世話になっています
  • PHPでは、PHP5.4で「配列がRubyみたいに“[]”で宣言できるようになった!マジ便利!」と言っている感じで、%記法の存在するRubyと比べると、配列の初期化の容易さでは一歩負けているなと思う次第

擬似変数たち(p70)

  • true, false, nilって擬似変数っていうものだったのか。それぞれがTrueClass, FalseClass, NilClassの唯一のインスタンス。

インスタンスつくろうとしたら怒られた。

[1] pry(main)> true_val = TrueClass.new
NoMethodError: undefined method `new' for TrueClass:Class
from (pry):1:in `__pry__'
  • PHPでは__DIR__は__FILE__と同じ、「自動的に定義される定数」なのですが、Rubyでは__dir__はKernelモジュールのメソッドであり、__FILE__は擬似変数であるという違いがある

数々の組み込み変数(p71)

  • Perlやシェルスクリプトもそうだけど、これらのググらビリティの低さは異常であり、ちょっとどうにかしてほしい
  • でも、便利なことは間違いない。いいですね

演算子がメソッドとして定義!!!(p74)

case .. when(p77)

メソッドやクラス/モジュール定義で例外を捕捉(p88)

  • なんだこれ便利すぎる。知らなかった。
  • いつも、PHPを書く際にメソッドごとtry{}でくくってネストが1段階下がるのにイライラしていたのでとても嬉しい感じですね
  • ついでに言うと、retryも便利すぎるんだが。えっbeginからもう一回やり直してくれるのなにそれ。

そろそろ時間もきているのでこれ以上列挙するのはやめておこう。

ところで

なんか、Rubyをひたすら褒めているだけな感じがしてきて、PHP書きとして面白くなくなってきたので、最後にPHPがRubyに対して圧倒的に優れていると思う点を書いておこう

PHPのインターフェース及びタイプヒンティングはとても優れています!!!!!!

いえ、まぁ、Rubyはダックタイピングな言語ですもんね。

最後に

私とRuby

私のプログラミングの歴史はRubyから始まっております(大学の講義でRubyを習い、その後Project Eulerの問題をひたすらRubyで解いていた記憶が)。そして、会社でPHPを書きながら「PHPのようなクソ言語は好かん。やはり全てがオブジェクトであるRubyかっこいいよRuby」といって、たまにあるバッチ処理をちょろっとRubyで書いたりRailsで忘年会用のWebサイトを作成するくらいで「俺は時代の先端のRubyを使いこなすプログラマだぜ」と言っているような痛い感じのプログラマでした。

そんな私が、今では毎日PHPを書いてすっかりPHPの魅力に魅せられ、Rubyのことは完全に忘れて今ではChefのレシピをRuby上のDSLで書いているだけになっていました。

今後

昔の私は所詮Rubyを手慰み程度でしか触っていなかったし、もっと何かRubyで作りたいですね。

ただ、現在PHPばかり書いているので、Rubyのような動的型付け言語ではなくもっとPHPと離れた言語を触りたいと思う今日このごろ。やはりこの前某氏にオススメされたAgdaか。証明!!!

comments powered by Disqus