クラスの中に定義するクラスメソッドとインスタンスメソッド

値を作ることで、現実世界のあらゆる「もの」をコードで表現することが可能
同じ種類でも、その中でそれぞれ個性があるようなものも表現することが出来る

人間を表現する場合は、属性として身長・性別、動作に食べる・笑うなどをクラスに定義
あとは個別のデータを追加してインスタンスを生成する

現実世界の「もの」には、できる動作とできない動作があります。

車はアクセルやブレーキを踏むと「加速する」「減速する」という動作が可能
人間のような「食べる」「笑う」という動作は不可能
逆に人間にとってみても車が持つ動作は不可能

現実世界の「もの」のように、クラスとインスタンスでデータを作る場合も、
それぞれの動作、つまりメソッドをあらかじめ決めておく

メソッドはクラスに定義しますが、それぞれ
クラスメソッドインスタンスメソッドの2種類がある

インスタンスメソッド

インスタンスメソッドは、インスタンスから呼び出すメソッド
インスタンスごとの個別の情報(属性値)を使った処理に使用

  • Carクラスの中に、ride_carメソッドを定義
  • Carクラスのインスタンスを生成
  • fire_truckという変数に値を代入
インスタンスメソッドの定義
class Car # クラス名

  def ride_car() # メソッド名
    # 処理
  end

end

fire_truck = Car.new()
fire_truck.ride_car() # メソッドを呼び出し

メソッド内に処理をまだ記述していないので、コードを実行しても何も処理は行われない
処理の記述をする際に重要なのがスコープ

補足情報

スコープとは?

  • メソッドの外で定義した変数はメソッドの中では使用できない
  • メソッドの中で定義した変数はそのメソッドの中でしか使用できない
  • クラスの中でも同様

属性と属性値

  • 属性は、データの性質となる情報
  • それぞれに当てはまる値を属性値

赤色の車の場合、属性「color(色)」は「red(赤)」という属性値


インスタンス変数

  • すなわちデータが持つ属性を定義する変数
  • 定義しておくことですべてのインスタンスが同じ属性を持つ
  • 属性値は、個々のインスタンスによって別々に設定可能

インスタンス変数は、クラス内のメソッドの中で
変数名の始めにアットマーク@を1つつけて定義

インスタンスメソッドの呼び出し
インスタンス名.メソッド名(引数)
  • インスタンス変数に代入
  • 引数を3としてride_carメソッドを呼び出し
  • 3という値が代入
インスタンス変数の定義
class Car
  def ride_car(ride_number)
    @ride_number = ride_number
    # @変数名 = 値 インスタンス変数の定義
  end
end

fire_truck = Car.new()
fire_truck.ride_car(3) # インスタンスメソッドの呼び出し,引数は 3

インスタンス変数は、インスタンスが個別に持つ属性値が入り、そのインスタンスのすべての動作に使用できる変数



クラスメソッド

クラスメソッドはクラスから呼び出すメソッド
共通の結果を返す動作を定義する

  • クラスメソッドとしてrunメソッドを定義
  • runメソッドを呼び出し
クラスメソッドの定義
class Car

  def self.run # クラスメソッドを定義
    puts '走行します'
  end

  def ride_car(ride_number)
    @ride_number = ride_number
  end

end

fire_truck = Car.new()
fire_truck.ride_car(3)

Car.run # メソッドの呼び出し

呼び出し方はこれまでのメソッドと同様ですが、クラスから呼び出すという点が異なる

メソッドの呼び出し
クラス名.メソッド名(引数)


代表的なクラスメソッドは、インスタンスを生成する際に使用してきたnewメソッドが該当する

newメソッド
# インスタンスを生成するためにクラスメソッドとして定義されている
user = User.new