« ライト、ついてますか2 | トップページ | ヤクルト広島 »

2007年9月 4日 (火)

Rubyその2

『たのしいRuby第2版』をちまちまと読んでいるのですが、今日やっとこさ第2部まで読み終わりました。そこまでで、Javaと違ったりしていていまいちピンとこないなぁという概念が2つありました。

  • モジュール
  • 例外処理・・・というか、catch throw文

です。

モジュールって、

  • インスタンスをもてない
  • 継承できない

という点でクラスと異なるとのこと。一瞬javaのインタフェースみたいなものかな?とも思ったのですが・・・違うか・・・いや、よく考えるとやっぱりそうかな?

■インタフェースと似てるところ

Javaってインタフェースを継承できなかったっけ?あ、あれは継承(extends)じゃなくて、実装(implements)だ。RubyだとMix-inってのがあるから、これがimplementsに相当するのかな。そういう意味では似てる。

■インタフェースと違うところ

Javaのインタフェース自身はメソッドの中身を定義できなくて、実装するクラス側に定義を強制する仕組みだけど、Rubyのモジュールではモジュール自身で、メソッドを定義しちゃうのね。

Javaのインタフェースという機構が分りにくい概念(『メソッドの実装を強制するって何か役に立つの?』)だったので、単純にメソッドを束にして定義しておいて、気楽にMix-Inして便利に使える機構にしたって事かなぁ。

一方、例外処理はJavaとはキーワードが違ってますね。try catch finallyの代わりに、begin rescue ensure endを使うのね。紛らわしいことに、catchとthrowってキーワードがあって、それは例外とは関係ないようです(関係ないにもかかわらず、例外処理の節に説明があってさらにややこしい!)。『catch throwの使い方がいまいち分らないなぁ。breakじゃだめなのかなぁ。。』と思ってちょっと調べてみたら、goto文とかレベル指定のbreakとして使えるのね。って例外処理とぜんぜん関係ないじゃん!『たのしいRuby第2版』9.11節には、『例外ではありませんが、』とさらっと書いてありますが、より明確に、『Javaでは例外処理はtry catch節が使われ、例外を投げるのにはthrow文が使われます。Rubyにも似たようなcatchやthrowというメソッドがありますが、これは実行の制御に使われるのであり、例外処理とは関係ないので気をつけてください。』という文章を入れておくべきだと思いました。さらにいえば、catch throwの話はこの例外処理の章からはずして、脚注で触れる程度にしておけばさらに良いと思います。そうすれば、Javaから入る人は『あぁRubyだと例外処理はtry catchじゃないのね』と思いますし、Rubyから入る人は、そもそも例外処理について学ぶときcatch throwについて知る必要はないのですから。制御文の項目に入れる(学ぶ)べき内容だと思います。

|

« ライト、ついてますか2 | トップページ | ヤクルト広島 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/207693/16345679

この記事へのトラックバック一覧です: Rubyその2:

« ライト、ついてますか2 | トップページ | ヤクルト広島 »