progateのbubyクラスの「料理注文システムを作ろう!」
のまとめ。
本当に基本的なところだからしっかり理解しようと思う。
まずはクラスから。
クラス
menu.rb
class Menu
attr_accessor :name
attr_accessor :price
def initialize(name:, price:)
self.name = name
self.price = price
end
def info
return "#{self.name} #{self.price}円"
end
def get_total_price(count)
total_price = self.price * count
if count >= 3
total_price -= 100
end
return total_price
end
end
インスタンス変数
クラスに情報を持たせるには、下記のようなインスタンス変数を作らなければいけない。
attr_accessor:シンボル
例:attr_accessor:name
この場合、nameをインスタンス変数と呼ぶ。
initializeメソッド
initializeメソッドは、「クラス.new」でインスタンスを生成した直後に自動で呼び出されるもの。
例:
test.rb
class Test
def initialize
puts "おはよう"
end
end
test1 = Test.new
コンソール結果
おはよう
と出力される。
インスタンスメソッド
クラスの中で定義して、インスタンスに対して呼び出すメソッドのこと。
例:
test.rb
class Test
def sample(age)
return "私は#{age}歳だ。"
end
end
test = Test.new
puts test.sample(20)
コンソール結果
私は20歳だ。
クラスを呼び出す方
index.rb
require "./menu"
menu1 = Menu.new(name: "ピザ", price: 800)
menu2 = Menu.new(name: "すし", price: 1000)
menu3 = Menu.new(name: "コーラ", price: 300)
menu4 = Menu.new(name: "お茶", price: 200)
menus = [menu1, menu2, menu3, menu4]
index = 0
menus.each do |menu|
puts "#{index}. #{menu.info}"
#連番にする
index += 1
end
puts "--------------"
puts "メニューの番号を選択してください"
# 入力を数値として受け取って変数orderに代入してください
order = gets.chomp.to_i
# 選択されたメニューのインスタンスを変数selected_menuに代入してください
selected_menu = menus[order]
# 「選択されたメニュー: ○○」となるように出力してください
puts "選択されたメニュー:#{selected_menu.name}"
puts "個数を入力してください(3つ以上で100円割引)"
# 入力を数値として受け取って変数countに代入してください
count = gets.chomp.to_i
# 「お会計は○○円です」となるように出力してください
puts "お会計は#{selected_menu.get_total_price(count)}円です"
each文
配列.each do |変数|
#したい処理
end
gets.chomp
このコードが実行されると、コンソールが待ち状態となる。
test = gets.chomp
とすることでエンターキーを押すまでに入力されたものがtestに代入される。
またこの場合は数字でも文字列として取得してしまうので、数値として取得したい場合は
test = gets.chomp.to_i
といった感じにする。