クラスとインスタンスの問題を解いてみた。基礎の復習も兼ねて今日もアウトプット。
問題
クラスFruitを定義して以下のように出力してください。
採れたて新鮮な果実です
リンゴは120円です
オレンジは200円です
イチゴは60円です
雛形
class Fruit
def クラスメソッド
# 正しくメソッドを定義した上で、ここに処理を記入してください
end
def initialize
# ここに処理を記入してください
end
def インスタンスメソッド
# 正しくメソッドを定義した上で、ここに処理を記入してください
end
end
# 3つのインスタンスを生成してください
# クラスメソッドを呼び出し、「採れたて新鮮な果実です」と表示してください
# インスタンス毎にインスタンスメソッドを呼び出し、「【名前】は【価格】円です」と表示してください
解答
class Fruit
def self.fresh
puts "採れたて新鮮な果実です"
end
def initialize(name, price)
@name = name
@price = price
end
def introduce
puts "#{@name}は#{@price}円です"
end
end
apple = Fruit.new("リンゴ", 120)
orange = Fruit.new("オレンジ", 200)
strawberry = Fruit.new("イチゴ", 60)
Fruit.fresh
apple.introduce
orange.introduce
strawberry.introduce
最初に3つのインスタンスの生成とインスタンス変数(@nameと@price)を定義する。
initializeメソッドはnewメソッドの引数を受け取ることができるので、インスタンス毎の名前と価格をnewメソッドから受け取って代入する。
class Fruit
def クラスメソッド
end
def initialize(name, price)
@name = name
@price = price
end
def インスタンスメソッド
end
end
apple = Fruit.new("リンゴ", 120)
orange = Fruit.new("オレンジ", 200)
strawberry = Fruit.new("イチゴ", 60)
次にクラスメソッドfreshを定義。文言が出力されるようにputsで記述。
class Fruit
def self.fresh
puts "採れたて新鮮な果実です"
end
def initialize(name, price)
@name = name
@price = price
end
def インスタンスメソッド
end
end
apple = Fruit.new("リンゴ", 120)
orange = Fruit.new("オレンジ", 200)
strawberry = Fruit.new("イチゴ", 60)
次にインスタンスメソッドを定義して、処理内容の文言が出力されるようにputsメソッドを使って記述。
class Fruit
def self.fresh
puts "採れたて新鮮な果実です"
end
def initialize(name, price)
@name = name
@price = price
end
def introduce
puts "#{@name}は#{@price}円です"
end
end
apple = Fruit.new("リンゴ", 120)
orange = Fruit.new("オレンジ", 200)
strawberry = Fruit.new("イチゴ", 60)
最後に定義したクラスメソッドとインスタンスメソッドを呼び出す。
class Fruit
def self.fresh
puts "採れたて新鮮な果実です"
end
def initialize(name, price)
@name = name
@price = price
end
def introduce
puts "#{@name}は#{@price}円です"
end
end
apple = Fruit.new("リンゴ", 120)
orange = Fruit.new("オレンジ", 200)
strawberry = Fruit.new("イチゴ", 60)
Fruit.fresh
apple.introduce
orange.introduce
strawberry.introduce
apple = Fruit.new("リンゴ", 120)以降が呼び出しの記述にあたり、
apple = Fruit.new("リンゴ", 120)でinitializeメソッドが呼び出されてインスタンス変数に値がそれぞれ代入され、Fruit.freshでクラスメソッド内の記述が呼び出され、apple.freshで最初に代入されたインスタンス変数が使われてインスタンスメソッド内の記述が呼び出される流れになる。