LoginSignup
0
1

More than 3 years have passed since last update.

ruby インスタンスの生成問題

Last updated at Posted at 2021-04-05

初めに

初学者です。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メソッドが呼び出され、最初に作られたインスタンス変数が使用されるといった流れになります。

0
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1