読者です 読者をやめる 読者になる 読者になる

せかいや

いまいるここを、おもしろく http://sekai-in-the-box.appspot.com/

【Ruby】初めてのRuby 学習感想文 ~完 (パーフェクトRubyとの比較など)

「初めてのRuby」を読み終わったので感想やメモ書きなど。

初めてのRuby

初めてのRuby


第1章からこつこつブログにまとめようかと思ったけど、
ふたを開けてみるとすごく分かりやすく、そこまでの感動はなかったので
まとめてこの記事に記載します。

全体の感想(「パーフェクトRuby」と比較して)

まさに初心者向け。
メタプログラミングも触り程度だし、実際のクラスやモジュールの仕組みについては
「パーフェクトRuby」の方が詳しかった。

例えば「パーフェクトRuby」では

演算子もメソッドの一部

って事にあまり解説がない(載ってはいるけどサンプルが不十分)けど、
この本を見ると、Fixnumがレシーバとなってメソッド実行していることが良く分かる。
 (これは、パーフェクトRubyの中でも特に2・3章が分かりづらいことに起因してるかも知れない・・・)

パーフェクトRuby2,3章でもがいている状況はこのあたりに載せています(生き恥)。

サンプルコードもシンプルで全量載っているから理解がしやすい。
誤字も一切ない。さすが5版。

「初めてのRuby」⇒「パーフェクトRuby」の流れのほうが良かったかな。

「クラスはオブジェクト」っていう話はもう飽きたって感じ。

こんなこと言っているの、師匠にばれたら大変だから秘密だけどね。


でも「メタクラス」という概念が理解できたのは良かった。

 

面白かったこと

「Classオブジェクトの特異クラス」がメタクラス

例えばStringクラスはClassのオブジェクト。
でもClassのインスタンスがイコールStringクラスではない。
Stringクラス独自のメソッド(特異メソッド)を持っている。
じゃあStringクラスは何のインスタンスなの?
 ⇒Stringクラスのクラス。つまりStringのメタクラス
Stringクラスは唯一の、Stringメタクラスのオブジェクト(シングルトン)。
Stringメタクラスから他のオブジェクトを作ることは出来ない。

 ※これは今時点の理解。まだ正確な文言ではないのだろう。。

→勉強しなおしたので追記しました。

super式は、Rubyの中でも珍しく括弧の有無が意味を持つ

superはメソッドじゃない。


 

「内部の変数に直接アクセスするな。メソッドを経由せよ」…
これはRubyという言語における設計指針の一つの現れです。
Ruby文法は望ましいプログラミングスタイルをプログラマに強制する傾向があります。

なるほど。Wikiを読んだときに「洗脳言語?!」って書いてあったけど
こういうことか。
他の実例も知りたいな。



 

コンテキストのすり替え

attr_メソッドを自作しようとして挫折した件
初めてのRubyを読んでもやっぱりどうすればいいのかまだ分からない。
モジュールに定義したメソッドを、
そのモジュールをinclude(or exclude)したクラスのインスタンスをレシーバとして呼び出す方法がまだ分からない。
instance_eval が使えるとも思えないし、
set_trace_funcを使うのも大掛かり過ぎる気がするし(出来るかわからないけど)。。

「attrメソッド 自作」でぐぐってもこのサイトがヒットするだけ。



とりあえずこんなことろ。
面白かった!