Ruby 復習 クラス変数 インスタンス変数

目次

  1. クラス変数とインスタンス変数の比較
  2. クラスメソッドとインスタンスメソッドの比較
  3. モジュールについて
  4. Mix-in

クラス変数とは

インスタンスごとにそれぞれ固有とは↓でいうインスタンスごと(masa=User.new(“masa”))によって実引数が違うから @name(インスタンス変数)に入る値はインスタンスによってバラバラである。

インスタンスメソッドとクラスメソッドの違い

インスタンスメソッド例 Anime = Anime.newというインスタンスを呼び出すためのメソッドをインスタンスメソッド(anime.naruto)という.

↓クラスメソッド

モジュールについて

⇨クラスのようにメソッドや定数をまとめたもの

クラスメソッド作る時と同じ書き方

モジュールの使用用途補足 まず単一継承と多重継承という考えがある。 単一継承(1つのクラスしか継承できない) 多重継承(複数のクラスを継承できる) Rubyは単一継承です。 なのでrubyで複数のクラスの共通処理を使いたくても継承できるクラスは1つのみ。そこで代わりにモジュールを使用します。クラスを使用していて、どうしても継承などだけでは足りない、という場合にモジュールを使う。つまり、継承で共通化仕切れない部分を補うために、モジュールで共通処理を作ってなんとかする

Mix-in では今ゲームをつくっていたとして、Player クラスと Monster クラスを用意していたとしましょう

その場合にどちらにもデバッグに関するメソッドを入れたいのですが、Debug と Player や Monster は継承関係にあるものでもないし、かといって両方に書くのも面倒だったりします。 その場合はデバッグに関するモジュールを作ってあげて、単に機能としてこちらのクラスに提供できたら便利です。

module Debug

  def info //self をつけずに単にインスタンスメソッドにしてあげると、それを他のクラスのインスタンスメソッドとしてはめ込むことができたりします=mix-in
    puts "#{self.class} debug info ..."
  end

end

class Player
  include Debug // include モジュール名でモジュール内のメソッドが使える
end

class Monster
  include Debug
end

Player.new.info // Player debag info 
Monster.new.info //Monster debug info

Player.new.info この部分は(Player.new).infoこう考えると分かりやすい (Player.new)でインスタンスを作っている。その後そのインスタンスに対してinfoメソッドを呼び出していると考えることができるかなと思います。