メモ(Ruby IV)
クラスとインスタンス
プログラミングでメニューという「もの」を生成するには、まずその「設計図」を用意する必要があります。設計図のことをクラス、「もの」のことをインスタンスと呼びますので、覚えておきましょう。
クラスを用意
クラスのデータを定義する方法の1つに「attr_accessor シンボル」を使う方法があります。Menuクラスのインスタンスにnameという情報を持たせることができます。このnameという情報のことをインスタンス変数と呼びます。
※attr=attribute=属性
class Menu attr_accessor:name attr_accessor:price end
クラスからインスタンスを作成
menu1=Menu.new
インスタンスに情報を追加
menu1.name = "ピザ" menu1.price=800
クラスの中でメソッドを定義して呼び出す
クラスの中で定義し、インスタンスに対して呼び出すメソッドのことをインスタンスメソッドと呼ぶ
class Menu attr_accessor :name attr_accessor :price def info puts "料理名と値段が表示されます" end end menu1 = Menu.new menu1.name = "ピザ" menu1.price = 800 menu1.info
self
正直、よく分からん。self:を消しても同じ結果になるし。
class Menu attr_accessor :name attr_accessor :price def info return "#{self.name} #{self.price}円" end end menu1 = Menu.new menu1.name = "ピザ" menu1.price = 800 puts menu1.info
総合演習(引数countが3以上なら100円引き)
class Menu attr_accessor :name attr_accessor :price def info return "#{self.name} #{self.price}円" end def get_total_price(count) total_price=self.price*count if count>=3 total_price-=100 return total_price end end end menu1 = Menu.new menu1.name = "ピザ" menu1.price = 800 puts menu1.get_total_price(3)
Initializeメソッド
インスタンスメソッドの中では、「self.変数名」でインスタンス変数を扱うことができるので、「self.変数名 = 値」でインスタンス変数に値を代入できる。
class Menu attr_accessor :name attr_accessor :price def initialize self.name= "ピザ" self.price= 800 end def info return "#{self.name} #{self.price}円" end end puts menu1.info
Initializeメソッドで引数を使う
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 end menu1 = Menu.new(name:"すし" ,price:1000) puts menu1.info
読み込み
require "./menu"
eachにて全メニューを表示
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] menus.each do |menu| puts menu.info end
番号を付ける
index=0 menus.each do |menu| puts "#{index}."+menu.info index+=1 end
入力を受け取る
name=gets.chomp #このままだと、数字を入れても文字列扱いになる count=gets.chomp.to_i #こうすると数値にしてくれる
総合演習(注文システム的なやつ)
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)}円です"
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