初めに
初学者です。rubyの問題を自分なりに解説することによって定着させるのが目的です。間違いなどありましたらご指摘お願いします。
問題
クラスFruitを定義して以下のように出力してください。
採れたて新鮮な果実です
リンゴは120円です
オレンジは200円です
イチゴは60円です
雛形
class Fruit
def クラスメソッド
# 正しくメソッドを定義した上で、ここに処理を記入してください
end
def initialize
# ここに処理を記入してください
end
def インスタンスメソッド
# 正しくメソッドを定義した上で、ここに処理を記入してください
end
end
# 3つのインスタンスを生成してください
# クラスメソッドを呼び出し、「採れたて新鮮な果実です」と表示してください
# インスタンス毎にインスタンスメソッドを呼び出し、「【名前】は【価格】円です」と表示してください
####解答
ではまずインスタンスの生成とインスタンス変数を定義します。
今回initialize
メソッドが使用されています。initialize
メソッドとはnew
メソッドの引数を受け取ることができます。
そしてinitialize
メソッドでインスタンス変数を作り、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
を定義します。
class Fruit
def self.fresh
puts "採れたて新鮮な果実です"
end
#以下省略
次にinitialize
メソッドで作ったインスタンス変数を使用して、リンゴは120円です
と出力できるようにインスタンスメソッドを定義していきます。
#以下省略
def introduce
puts "#{@name}は#{@price}円です"
end
#以下省略
ここまで書けたら定義したインスタンスメソッドとクラスメソッドを呼び出します。
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
の記述でクラスメソッドが呼ばれて、puts "採れたて新鮮な果実です"
が実行されます。
最後にapple.introduce
の記述でintroduce
メソッドが呼び出され、最初に作られたインスタンス変数が使用されるといった流れになります。