0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

二重ハッシュより値を取り出し、ゲッターにより出力致します。

Last updated at Posted at 2020-09-09
class Fruits 

  def initialize(name, color, variety) #仮引数(第一引数, 第二引数, 第三引数) #initializeメソッドは新たな呼び出しは不要です。
    @name = name #インスタンス変数を定義
    @color = color
    @variety = variety
  end

  def  name #ゲッター(ゲッターメソッド名は、クラス外で出力する際に用いますので、重要です。)
    @name #インスタンスの値を取得している
  end

  def color #同じくゲッター
    @color 
  end

  def variety
    @variety
  end

end

class InfoFruits #呼び出しが必要です。

  def initialize(fruits) #インスタンス変数の定義
    @fruits = fruits
  end

  def fruits #ゲッター
    @fruits #インスタンス変数の値の取得 #実引数三つ分の配列です。
  end

  def info_fruits
    self.fruits.each do |fruit| #eachメソッドは配列の要素の数だけ、繰り返し処理を行います。
    #self.fruitsはインスタンスの値、実引数三つ分の配列です。
      puts "#{fruit.name}#{fruit.color}です。品種は#{fruit.variety}です。" #ゲッターで取得しました値の出力の際は**インスタンス名.ゲッターメソッド名**と記述致します。
    end
  end

end

array = [{info:{info_fruit_name: "りんご", info_fruit_color: "赤色"}}, #配列の中に二重ハッシュが含まれています。
 {info:{info_fruit_name: "バナナ", info_fruit_color: "黄色"}},
 {info:{info_fruit_name: "ぶどう", info_fruit_color: "紫色"}}]

fruits = []

array.each do |double_hash| #eachメソッドは配列の要素の数だけ処理を繰り返し行います。
  fruit_name = double_hash[:info][:info_fruit_name] #二重ハッシュの場合、keyを二つ選択することにより、目的のvalueの取得に成功いたします。
  fruit_color = double_hash[:info][:info_fruit_color]

  puts "#{fruit_name}の品種はどちらになりますか?"
  double_hash[:info][:info_fruit_variety] = gets.chomp #ハッシュに新たなkeyを指定してあげることで、新たなvalueの追加が可能となります。
  fruit_variety = double_hash[:info][:info_fruit_variety]

    if fruit_variety == "シャインマスカット" #条件分岐
      fruit_color = "緑色"
    end

  fruits << Fruits.new(fruit_name, fruit_color, fruit_variety) #実引数をFruitsクラスに渡し、インスタンスを生成すると同時に、initializeメソッドが処理を行いインスタンス変数を定義し、その値をゲッターにより取得します。
                      #仮引数と実引数の数は合わせます。#値を取得することにより、クラスのスコープ外で出力が可能となります。出力の際は**インスタンス名.ゲッターメソッド名**と記述致します。

end


info_fruit = InfoFruits.new(fruits) #三つ分の実引数を持った、配列fruitsをInfoFruitsクラスに渡し、インスタンスを生成し、initializeメソッドが処理を行い、インスタンス変数を定義、ゲッターにより、その値を取得します。
info_fruit.info_fruits #info_fruitsインスタンスメソッドの呼び出しです。

#出力結果

りんごの品種はどちらになりますか?
ふじ
バナナの品種はどちらになりますか?
ジャイアント・キャベンディッシュ
ぶどうの品種はどちらになりますか?
巨峰
りんごは赤色です。品種はふじです。
バナナは黄色です。品種はジャイアント・キャベンディッシュです。
ぶどうは紫色です。品種は巨峰です。
#出力結果

りんごの品種はどちらになりますか?
ふじ
バナナの品種はどちらになりますか?
ジャイアント・キャベンディッシュ
ぶどうの品種はどちらになりますか?
シャインマスカット
りんごは赤色です。品種はふじです。
バナナは黄色です。品種はジャイアント・キャベンディッシュです。
ぶどうは緑色です。品種はシャインマスカットです。

誤っている箇所、認識が不足している部分について、ご指摘頂ければ幸いに存じます。

0
0
0

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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?