SyuchiNikuRingの備忘録

お勉強したことをまとめておく場所。中の人の理解や感覚で書いているから不正確なことも多いかも。

Ruby入門season4~クラス分け~

やっほー。今回はクラスを分けることについてまとめていきます。
コードが増えてくると、一つのクラスに詰め込むのは精神衛生上良くないので、クラスを分けます。
分ける際には、require "./クラス"とします。こうすることでファイル内でファイル外のものを読み込めるようになります。
次に標準入力の受付についてです。ようやく登場しましたね。gets.chompを用いて標準入力を受け付けます。ただしこれは常に文字列として受け付けます。数値として受け付けたいときには、gets.chomp.to_iを使います。これで数値として入力を扱えます。
早速やってみます。これが実行クラス側です。

require "./menu"

menu1 = Menu.new(name: "茶碗蒸し", price: 1000)
menu2 = Menu.new(name: "釜めし", price: 1200)
menu3 = Menu.new(name: "寿司", price: 3000)
menu4 = Menu.new(name: "葛餅", price: 600)

#配列に入れる。
menus = [menu1, menu2, menu3, menu4]
#メニューを表示
index = 0
menus.each do |menu|
  puts "#{index}. #{menu.order}"
  index += 1
end

puts "ご注文はお決まりですか"

order_index = gets.chomp.to_i #注文番号を標準入力から受け取る
selected_menu = menus[order_index] #受け付けたメニューを取り出す
puts "ご注文は#{order_index}番の#{selected_menu.name}でよろしいでしょうか"

puts "おいくつになさいますか"
count = gets.chomp.to_i #個数を標準入力から受け取る

puts "お会計は#{selected_menu.total_price(count)}円になります"

そしてこれが分割したクラスです。

class Menu
  attr_accessor :name
  attr_accessor :price
  
  def initialize(name:, price:)
    self.name = name
    self.price = price
  end
  
  def order
    return "#{self.name} #{self.price}"
  end
  
  def total_price(count)
    total_price = self.price * count
    return total_price
  end
end

実行した結果はこんな感じ。
f:id:SyuchiNikuRing:20180909160623p:plain

葛餅の気分なので3を選択します。
f:id:SyuchiNikuRing:20180909160650p:plain

個数を聞かれます。
f:id:SyuchiNikuRing:20180909160716p:plain
個数を入力するとお会計まで計算してくれました。

今回はここまで。

余談ですが、今回からはコードをちゃんと表示できるようになりました。