プログラミング言語Ruby

プログラミング言語 Ruby

プログラミング言語 Ruby

Rubyの言語仕様勉強するために読んだ。他のオライリー本と同様に入門書の類ではないので、C++とかJavaとかなんらかオブジェクト指向言語の理解がある人がRubyの言語仕様を一通り理解するのに良いのではないかと思う。出版が2009年で、Ruby1.8系から1.9系の過渡期に書かれた本のため、1.8系と1.9系の違いについて細かい注釈が多々あり、今となっては1.8系サポートされてないので時代を感じるところもある。てか、1.8と1.9細かな非互換の違いありすぎて恐ろしい言語だと思った。ちなみに1.9系はサポートが2015/2/23に終了するらしい。先日2.2が出たけど、1.9系以降はあんまりクリティカルな非互換はなさそうなので、この本に1.9系の注釈が多数あるのは古びないために結果として良かったのだと思う。
読んでて改めて思ったのだけどRubyの言語仕様は巨大。いろんな構文があって、同じことするのにもいろんな書き方があって、標準ライブラリにも同じメソッドにいろんな別名があって。PerlのThere's More Than One Way To Do It.の思想を受け継いでる。たぶん全部を理解する必要はなくて、その人のレベルや好みに合わせて自分で好きなように書けばよいのだろうけど、人のコード読むためには、いろんな書き方も学ぶ必要があって、結果的に学習コストは高いと思う。ただ素早く完結なコードが書けるのは言語やライブラリのコンテクストが大きいからでもあって、一長一短なのかなぁというかんじもする。
一番危険でなんでこんな言語仕様になってんだろうというのはprivateメソッドとメンバ変数が継承先のサブクラスからも見えるのでたまたま同じ名前で上書きしてしまうと、意図せず挙動が変わってしまうので、継承元のクラスの実装をすべて把握しているクラスしか継承してはいけない。つまり実質自分で書いたクラスしか継承しないか、標準クラスはprivateまで把握しないといけないということかい。よくわからないクラスは委譲とか使うのが安全なのか。純粋オブジェクト指向言語なのに、なぜだか迂闊に継承できないのがすごいモヤっとする。