1
0

More than 3 years have passed since last update.

【Ruby】initializeメソッドとクラス変数を使って合計金額を出す方法

Last updated at Posted at 2020-12-29

概要

合計金額の出し方はいくつも方法があります。

今回はその中でもinitialize メソッドと クラス変数を使用します。

目次

  • 実践

    • 問題
    • 条件(構成)
    • 解答(解説)
    • プロセス
    • 補足
  • まとめ

  • 参考文献

実践

問題

initialize メソッドと クラス変数 を用いて果物の合計金額を出力してください。

条件(構成)

  • クラス名

    • Fruits
  • インスタンス

    • apple
      • 名前: リンゴ
      • 値段: 200
    • banana
      • 名前: バナナ
      • 値段: 150
    • melon
      • 名前: メロン
      • 値段: 500
  • クラス変数

    • sum
  • クラスメソッド

    • get_sum
  • インスタンス変数

    • name
    • price

解答(解説)

解答例
class Fruits
  attr_reader :name, :price #読み取り可能にする

  @@sum = 0 # 変数定義

  def initialize(name, price) # initializeメソッドで引数としてname,priceを受け取る
    @name  = name             # インスタンス変数@nameを定義
    @price = price            # インスタンス変数@priceを定義
    @@sum += price            # @@sumに各フルーツの合計金額を足していく
  end

  # 果物の名前と値段
  def cost
    puts "#{name}の値段は#{price}円です。"
  end

  # 果物の合計金額
  def self.get_sum
    puts "合計の価格は#{@@sum}円です!"
  end

end

# インスタンス生成
apple  = Fruits.new('リンゴ', 200)
banana = Fruits.new('バナナ', 150)
melon  = Fruits.new('メロン', 500)

# 呼び出し
apple.cost
banana.cost
melon.cost
Fruits.get_sum

# ターミナル出力結果

# リンゴの値段は200円です。
# バナナの値段は150円です。
# メロンの値段は500円です。
# 合計の価格は850円です!

プロセス

1.インスタンス生成

  • 引数をクラス内に渡す
  • initialize が呼び出される

2.initialize

  • インスタンス変数定義
  • @@sum に各フルーツの price を足していく

3.メソッドを定義してターミナルに出力できるようにする

4.メソッド呼び出し

補足

  • attr_reader を使うことでインスタンス変数を@なしで使用することができます。(コードでいうと costメソッドname と price

まとめ

  • インスタンス生成時 に initialize は呼び出される
  • クラス変数は @@ を変数の前につけることで定義することができる
  • attr_reader を使うことで ゲッターメソッド が定義できる
  • attr_writer を使うことで セッターメソッド が定義できる
  • attr_accessor を使うことで ゲッター / セッターメソッド が両方を定義できる

参考文献

1
0
4

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
1
0