#クラスとは?
設計図や料理のレシピのような物です。新しい物を作るのにその度に一から作るのは手間と時間がかかります。
それを避けるために、共通のルールを守った上で個別のデータを作ることが出来るようにする物です。
クラスは共通の処理と属性を決めるだけで、単体でデータを扱うことはできません。
class クラス名
# 変数やメソッドの定義
end
今回はジャムを作るJamクラスを定義して見ましょう。
class Jam
end
##インスタンスとは
実際に作られる『もの』のことです。
クラスを定義しましたがクラスだけでは何のデータも持ちません。
データを持つインスタンスをクラスから生成します。
クラスは定義しなくてもnewというメソッドを始めから持っていてこれを実行することで
データを持つインスタンスが生成されます。
インスタンスを生成したあとからデータを追加したり、メソッドを実行できるようにするために
変数に代入して作ります。
変数名 = クラス名.new
実際にインスタンスを生成してみると
class Jam
end
strawberry_jum = Jam.new
今はレシピに何も書かれていないので空の状態です。
##インスタンスメソッド
名前の通りインスタンスが使用できるメソッドでクラスに記述します
class クラス名
def メソッド名
# 処理
end
end
実際にインスタンスメソッドを定義してみましょう。
class Jam
def make_jam
#処理を記入
end
end
strawberry_jum = Jam.new
strawberry_jum.make_jam
まだメソッドの中身を定義していないので何も起きません。(後ほど中身を記入して使います。)
#インスタンス変数
データの持つ属性を定義する物です。
定義しておくことで全てのインスタンスは同じ属性を持ちますが
それぞれ異なる値を設定することができます。
例えば同じ『ボール』という属性を定義したとしても値は『サッカーボール』や『バスケットボール』や『野球ボール』と様々な値がありますよね。
変数の頭に@をつけてこのように定義します。
class クラス名
def メソッド名
@変数名 = 値 # インスタンス変数
end
end
インスタンス変数のスコープは、そのクラスのすべてのインスタンスメソッドなのでインスタンスの全ての動作に使用できます。
##initializeメソッド
インスタンスが生成されると同時に、定義した処理が実行されるインスタンスメソッドです。
今回の場合newメソッドでインスタンスが作られた時に同時に生成されます
インスタンス変数とinitializeメソッドを使ってみましょう。
class Jam
def initialize(jam_taste,jam_color,jam_price) #渡した引数が代入される
@taste = jam_taste #jam_tasteにstrawberryが代入されている
@color = jam_color #jam_colorにredが代入されている
@price = jam_price #jam_priceに300が代入されている
end
def make_jam
end
end
strawberry_jum = Jam.new('イチゴ','赤',300)#引数を渡す
strawberry_jum.make_jam
インスタンスメソッドmake_jamに処理を記述して使ってみましょう。
class Jam
def initialize(jam_taste,jam_color,jam_price)
@taste = jam_taste
@color = jam_color
@price = jam_price
end
def make_jam
puts "#{@taste}味のジャムを作ります。色は#{@color}色で値段は{@price}円です"
end
strawberry_jum = Jam.new('イチゴ','赤',300)
strawberry_jum.make_jam #イチゴ味のジャムを作ります。色は赤色で値段は300円です と出力される。
end
ちなみに、みかん味のジャムが作りたくなったらどうするかというと
class Jam
def initialize(jam_taste,jam_color,jam_price)
@taste = jam_taste
@color = jam_color
@price = jam_price
end
def make_jam
puts "#{@taste}味のジャムを作ります。色は#{@color}色で値段は{@price}円です"
end
strawberry_jum = Jam.new('イチゴ','赤',300)
strawberry_jum.make_jam
orange_jum = Jam.new('みかん','オレンジ','250')
orange_jum.make_jum #みかん味のジャムを作ります。色はオレンジ色で値段は250円です と出力される。
end
このようになります。
##クラスメソッド
クラスで共通した処理を定義したい時に使います。
メソッド名の頭に self をつけて定義します
class クラス名
def self.メソッド名
# 処理
end
end
実際に使ってみましょう。
class Jam
def self.use
puts "パンに塗って使います"
end
def initialize(jam_taste,jam_color,jam_price)
@taste = jam_taste
@color = jam_color
@price = jam_price
end
def make_jam
puts "#{@taste}味のジャムを作ります。色は#{@color}色で値段は{@price}円です"
end
strawberry_jum = Jam.new('イチゴ','赤',300)
strawberry_jum.make_jam
orange_jum = Jam.new('みかん','オレンジ','250')
orange_jum.make_jum #みかん味のジャムを作ります。色はオレンジ色で値段は250円です と出力される。
Jam.use #パンに塗って使います と出力される。
end
以上です。