上京エンジニアの葛藤

都会に染まる日々

「初めてのRuby」を読んだ(8章)

ようやく最後の章(書籍では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つある

  1. Ruby の基礎が学べそう
  2. ページ数の少なさから 1章ごとに書くことで、最後まで諦めずアウトプットができそう

1つ目の Rubyの基礎 は何を持って基礎なのかという議論は置いておくとすると、少なくとも業務に差し支えなく開発ができているというのが現状だ
どちらかというと、今は Rails の方で悩むことが多い

2つ目に関しては、なんとか最後までアウトプットすることができた
やはり自分の頭の中が整理されたし、サンプルコードなどを自分で作成することで理解も深まった気がする

逆に良くなかった点として、対象の Ruby バージョン(1.8 or 1.9)が古いというのを改めて感じた
もちろん、古いことを承知の上で読んでいたが、今 2.6 ということもあり変更されてる点がちょこちょこあった
今はたくさん入門書も出ているので、他の書籍も検討した方が良いと思う

兎にも角にも、お疲れ様でした
次は何をしようかな