ようやく最後の章(書籍では9章まであるが、技術的な内容が書かれていないので8章で終わる)にたどり着くことができた
いやー長かった...
ということで、最後のまとめ 8章「オブジェクトとクラス」について書く
クラス
継承
親クラスを省略した場合、Objectクラス
を継承し、多重継承することはできない
インスタンスメソッド の定義
クラス内に def式を定義すると、インスタンスメソッドを定義する子ができる
インスタンスメソッドは、インスタンスに対してメソッドを呼び出すことができる
class Hoge def sample puts "hoge" end end hoge = Hoge.new hoge.sample # => hoge
クラスメソッドの定義
クラスに直接するメソッドなので、インスタンスを介せず呼び出すことができる
class Hoge def Hoge.sample puts "hoge" end end Hoge.sample # => hoge class Hoge def self.sample puts "hoge" end end Hoge.sample # => hoge
オープンクラス
既存クラスを再定義することで、クラスを再定義することができる
この特徴をオープンクラスという
※freeze を使うことでクラスの変更を禁止することができる
class String def self.hoge puts "hoge" end end String.hoge # => hoge
特異メソッド
特異メソッドは シングルトンメソッド
とも呼ばれ、インスタンスを一つしか持たない
クラスメソッドは Classオブジェクトの特異メソッドであり、特異メソッドが定義されているクラスは特異クラスということになる
※実装上は、特異メソッドは特異クラスのインスタンスメソッド になっている
class Hoge class << self def hoge puts "hoge" end end end p Hoge.singleton_methods # => [:hoge]
モジュール
インスタンス化できないクラスのようなもの
モジュールのメリットとしては、以下二つがある
- Mix-in
Mix-in とは制限された多重継承のこと - 名前空間 名前の衝突の問題を防ぐ
感想
去年の12月頃から Ruby を勉強し始めて約4ヶ月が経過したが、結果的に「初めてのRuby」は2周読んだ(いや、もっと読んでる気がする)
他にも「プロを目指す人のためのRuby入門」、「メタプログラミングRuby」、「オブジェクト指向設計ガイド」らへんも読んでる
今回「初めてのRuby」をまとめてアウトプットした理由としては、主に2つある
- Ruby の基礎が学べそう
- ページ数の少なさから 1章ごとに書くことで、最後まで諦めずアウトプットができそう
1つ目の Rubyの基礎
は何を持って基礎なのかという議論は置いておくとすると、少なくとも業務に差し支えなく開発ができているというのが現状だ
どちらかというと、今は Rails の方で悩むことが多い
2つ目に関しては、なんとか最後までアウトプットすることができた
やはり自分の頭の中が整理されたし、サンプルコードなどを自分で作成することで理解も深まった気がする
逆に良くなかった点として、対象の Ruby バージョン(1.8 or 1.9)が古いというのを改めて感じた
もちろん、古いことを承知の上で読んでいたが、今 2.6 ということもあり変更されてる点がちょこちょこあった
今はたくさん入門書も出ているので、他の書籍も検討した方が良いと思う
兎にも角にも、お疲れ様でした
次は何をしようかな