そもそもクラスとは
ー設計図ー
正直ピンと来そうで来ないです・・・・ もう少し細分化していきます。
まず設計図に必要な情報は・・・・
・どのような情報を持っているのか(初期設定)・・・・・インスタンス変数
・どんなことができるのか(メソッド)・・・・・・インスタンスメソッド
インスタンスとは??
・インスタンスが付く時は必ずクラス内で定義されている
・newアクションで生成された実体である(設計図だけでは実体はない)
まず日本語で記述してみる(今回はカップを設計してみます)
class カップ
有無や容量を全てのメソッドで使えるようにする
def 初期設定 (有無,容量)
- 取っ手があるかないか
- カップの容量
end
def カップのできること (投入量,消費量)
- 飲み物を保管する
- 飲み物を取り出す
→条件分岐 投入量が多すぎる時
→条件分岐 消費量が多すぎる時
end
end
カップ1 = カップ.new(取ってあり,200ml) #初期値の情報を代入してカップ1を生成
カップ2 = カップ.new(取って無し,100ml) #上記に同じくカップ2を生成
カップ1.カップのできること(投入量,消費量) #上記で生成した変数にメッソドを当てる
カップ2.カップのできること(投入量,消費量) #上記で生成した変数にメッソドを当てる
実際に記述してみる
class Cap
attr_accessor :handle, :capacity
def initialize(handle,capacity)
@handle = handle
@capacity = capacity
end
def change(input,remove)
if input > @capacity
puts "キャパオーバーです。"
else
input -= remove
if input < 0
puts "飲みすぎです"
else
input
end
end
end
end
cup_1 = Cap.new(true,500)
cup_2 = Cap.new(false,300)
puts cup_1.change(1000,100)
puts cup_2.change(200,50)
上記の記述の出力結果
キャパオーバーです。
150
上記の内容からのまとめ
・クラスをつくることによってカップ1やカップ2のような同じ機能を持った実体を簡単に複製できる。
・クラスの中で定義された変数やメソッドをインスタンス変数やインスタンスメソッドと呼ぶ
・クラス(設計図)はnewで実体(インスタンス)を生成する
・生成されたインスタンスは個別の情報を持っている
・共通の情報をもつ時はクラス変数を使う"@@クラス名"
一旦ここまで整理しました。
言葉足らずや認識違いがある時はご指摘頂けますと幸いです。