概要
合計金額の出し方はいくつも方法があります。
今回はその中でもinitialize
メソッドと クラス変数
を使用します。
目次
-
実践
- 問題
- 条件(構成)
- 解答(解説)
- プロセス
- 補足
まとめ
参考文献
実践
問題
initialize メソッドと クラス変数 を用いて果物の合計金額を出力してください。
条件(構成)
-
クラス名
- Fruits
-
インスタンス
- apple
- 名前: リンゴ
- 値段: 200
- banana
- 名前: バナナ
- 値段: 150
- melon
- 名前: メロン
- 値段: 500
- apple
-
クラス変数
- 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
を使うことで ゲッター / セッターメソッド が両方を定義できる