Ruby Ⅳ

クラスの定義
クラスclass
まずは左の図のクラス(設計図)を用意します。
クラスは「class クラス名」とすることで定義できます。
クラス名は必ず大文字で始めることと、「end」を書く必要があることに注意しましょう。

class Menu
attr_accessor :name
attr_accessor :price
end

menu1 = Menu.new

menu1.name = “ピザ”
puts menu1.name

# menu1のpriceに「800」を代入してください
menu1.price = 800

# menu1のpriceを出力してください
puts menu1.price

クラスの中でメソッドを定義する

class Menu
attr_accessor :name
attr_accessor :price

def info
# 文字列「料理名と値段が表示されます」をreturnしてください
return “料理名と値段が表示されます”
end
end

menu1 = Menu.new
menu1.name = “ピザ”
menu1.price = 800

# menu1に対してinfoメソッドを呼び出して戻り値を出力してください
puts menu1.info

インスタンスメソッドの中でインスタンス変数を扱う
クラスインスタンス変数self
インスタンスメソッドの中では、特殊な変数「self」を用いて「self.変数名」とすることで、インスタンス変数を扱うことができるようになります。
インスタンスメソッドでは、変数「self」に、呼び出したインスタンス自身が代入されています。

class Menu
attr_accessor :name
attr_accessor :price

def info
return “#{self.name} #{self.price}円”
end

# get_total_priceメソッドを定義してください
def get_total_price(count)
total_price = self.price * count
if count >= 3
total_price -= 100
end
return total_price
end

end

menu1 = Menu.new
menu1.name = “ピザ”
menu1.price = 800

# menu1に対してget_total_priceメソッドを呼び出してください
puts menu1.get_total_price(3)

initializeメソッド
インスタンスメソッドinitialize
まずは、インスタンスを生成した直後に処理を実行することができる、initializeメソッドというものを学びましょう。
initializeメソッドは、「クラス名.new」でインスタンスを生成した直後に自動で呼び出されます。

class Menu
attr_accessor :name
attr_accessor :price

# initializeメソッドを定義してください
def initialize
self.name = “ピザ”
self.price = 800
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

menu1 = Menu.new

# menu1に対してinfoメソッドを呼び出して戻り値を出力してください
puts menu1.info

class Menu
attr_accessor :name
attr_accessor :price

# initializeメソッドを書き換えてください
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

# 引数を渡してインスタンスを生成してください
menu1 = Menu.new(name:”すし”,price:1000)

puts menu1.info

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を定義して配列を代入してください
menus = [menu1, menu2, menu3, menu4]

# menusに対して繰り返し処理を実行してください
menus.each do |menu|
puts menu.info
end

繰り返し処理で番号をつける
目標物では、メニュー名の左に0から順番に番号がついていました。
番号をつけるには、番号を保存するための変数(図の例では変数index)をeach文の外で用意して、each文の処理の中で値を1だけ増やして更新するようにします。

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」を代入してください
index = 0

menus.each do |menu|
# 番号をつけてメニューの内容が出力されるように書き換えてください
puts “#{index}. #{menu.info}”

# 変数indexに1を加えて値を更新してください
index += 1
end

「gets.chomp」で入力された値を受け取ることができましたが、実はこれは文字列になるため、「3」と入力しても文字列の”3″になってしまいます。
数値の計算などに用いる場合は、これを数値に変換する必要があります。
そのためには、「gets.chomp.to_i」とすることで、入力された内容を数値に変換し、計算などにも使えるようになります。

puts “名前を入力してください”

# 入力を受け取って変数nameに代入してください
name = gets.chomp

# 「○○さん、いらっしゃいませ」となるように出力してください
puts “#{name}さん、いらっしゃいませ”

puts “1つ100円のお菓子があります”
puts “いくつ買いますか?”

# 入力を数値として受け取って変数countに代入してください
count = gets.chomp.to_i

# 変数total_priceに、100とcountを掛けた値を代入してください
total_price = 100 * count

# 「お会計は○○円です」となるように出力してください
puts “お会計は#{total_price}円です”

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)}円です”

シェアする

  • このエントリーをはてなブックマークに追加

フォローする