クラスとは?
ものを作り出すための設計図。
設計図のことをクラス、「もの」のことをインスタンスと呼ぶ
インスタンスを生成するステップ
①クラスは「class クラス名」で用意できる。
【書き方】
class Menu
end
ポイント
- クラス名は大文字で始める
- 最後に「end」が必要
②クラスの中身を用意する
「attr_accessor シンボル」を使う
Menuクラスのインスタンスにnameという情報を持たせることができる
【書き方】
class Menu
attr_accessor :name (このnameという情報のことを、インスタンス変数という)
attr_accessor :price
end
クラス(設計図)を元に、新しくインスタンスを生成するには、「クラス名.new」とする。
【書き方】
class Menu ・・・
end
menu1 = Menu.new
↑Menuからインスタンスを生成して、menu1に代入する
インスタンスに情報をもたせるには、クラスで用意したインスタンス変数に値を代入する。
「インスタンス.変数名 = 値」とすることで、そのインスタンス変数に値を入れられる。
【書き方】
class Menu
attr_accessor :name
attr_accessor :price
end
menu1 = Menu.new
menu1.name = “すし” ← menu1のnameに「すし」を代入
puts menu1.name → 「すし」と出力される
クラスの中でメソッドを定義する
【書き方】
class Menu
attr_accessor :name
attr_accessor :price
def show
puts “私はメニューです”
end
end
menu1 = Menu.new
menu1.show
- クラスの中で定義したメソッドは、インスタンスに対して使うようにして呼び出せる
- 呼び出す際は「インスタンス.メソッド名」とする
【書き方:引数や戻り値も使える】
class Menu
attr_accessor :name
attr_accessor :price
def show(data) ← 引数
return “私は#{data}です” ← 戻り値
end
end
menu1 = Menu.new
puts menu1.show(“メニュー”)
インスタンスメソッドの中でインスタンス変数を扱う
インスタンスメソッドの中では、変数「self」を用いて「self.変数名」とすることで、インスタンス変数を扱える。
【書き方】
class Menu
attr_accessor :name
attr_accessor :price
def show
puts “私は#{self.name}です” →「self.変数名」でインスタンス変数(インスタンスの情報)を扱えるようにする
end
end
menu1 = Menu.new → Menuからインスタンスを生成してmenu1に代入する
menu1.name = “ピザ” → menu1のnameにピザを代入
menu1.show → 「私はピザです」と出力される
合計金額を求めるメソッド【9/9のつまづきポイント】
class Menu
attr_accessor :name
attr_accessor :price
def info
return “#{self.name} #{self.price}円”
end
def get_total_price(count) → 引数countを受け取るget_total_priceメソッドを作成
total_price = self.price * count → 金額×数量をかけた金額が合計金額を定義する
if count >= 3 → 合計金額が3個以上の時100円引き
total_price =- 100
end
retuan total_price → 上記でできた結果を返す
end
end
menu1 = Menu.new
menu1.name = “ピザ”
menu1.price = 800
puts menu1.get_total_price(3) → 数量が3の時のget_total_priceメソッドを呼び出す。
インスタンスを生成するステップ2・3をまとめる
→ インスタンスを生成すると同時に、インスタンス変数に値を代入できるようにする
インスタンスを生成した直後に処理を実行する【initializeメソッド】
initializeメソッドは、「クラス名.new」でインスタンスを生成した直後に自動で呼び出される。
【書き方】
class Menu
attr_accessor :name
attr_accessor :price
def initialize
puts “私はメニューです”
end
end
menu1 = Menu.new → 私はメニューです と出力される
initializeメソッドでインスタンス変数を扱う
class Menu
attr_accessor :name
attr_accessor :price
def initialize
self.name = “ピザ” インスタンス生成直後にインスタンス変数nameに代入
end
end
menu1 = Menu.new
puts menu1.name → ピザ と出力される
- インスタンスメソッドの中では、「self.変数名」でインスタンス変数を扱うことができるので、「self.変数名 = 値」でインスタンス変数に値を代入できる
initializeメソッドの引数
「クラス.new」に対して引数を渡すことで、initializeメソッドにその値を渡すことができる
【書き方】
class Menu
attr_accessor :name
attr_accessor :price
def initialize(message)
puts message
end
end
menu1 = Menu.new(“こんにちは“) 「こんにちは」がmessageに代入される
initializeメソッドでインスタンス変数に値を代入する
キーワード引数を使うとすっきりする。
【書き方】
class Menu
attr_accessor :name
attr_accessor :price
def initialize(name:,price:)→ キーワード引数を受け取れるようにする
self.name = name インスタンス変数name・priceにname・priceをそれぞれ代入する
self.price = price
end
end
menu1 = Menu.new(name:おにぎり,price:100)
ファイルを分割する
require
Menuクラスの定義をmenu.rbに移動させたら、menu.rbのコードをindex.rbでも使えるようにする。
index.rbの一番上の行で、「require “./menu”」とすることで、menu.rbのコードを読み込めるようになる。
メニューを一覧表示する
each文を用いて、それぞれのメニューの情報が1つずつ表示されるようにする
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を定義して、配列を代入する
menus.each do |menu| → menusの要素を1つずつ表示するためにeach文を作成する
puts menu.info →変数menuに対してinfoを呼び出す
end
メニュー番号を表示する
繰り返し処理で番号をつける
【書き方】
fruits = [“りんご”,”みかん”,”ばなな”]
index = 0 番号をつけるために、番号を保存するための変数(例index)をeach文の外で用意する。
fruits.each do |fruit|
puts “#{index}.#{fruit}”
index += 1 each文の処理の中で値を1だけ増やして更新する
end
どのメニューを注文するか選べるようにする
注文の入力を受け付けるには「gets.chomp」を使う。
このコードが実行されると、コンソールが入力待機状態になる。
【書き方例:文字列】
puts “名前を入力してください”
name = gets.chomp 「変数 = gets.chomp」とすることで、エンターキーを押されるまでに入力された値を変数に代入できる
puts “あなたの名前は#{name}です”
【書き方例:数字】
puts “番号を入力してください”
number = gets.chomp.to_i 「gets.chomp.to_i」とすることで、入力された内容を数値に変換
puts “#{number}の2倍は#{number * 2}です” 計算などにも使える
メニューを選べるようにする【9/9つまづきポイント】
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 = gets.chomp.to_i → 入力を数値として受け取って、変数orderに代入する
selected_menus = menus[oder] 選択されたメニューのインスタンスを変数selected_menuに代入→オーダー番号のメニュー
puts “選択されたメニュー:#{selected_menu.name}” 「選択されたメニュー: ○○」となるように出力→選択されたメニューの名前
puts “個数を入力してください(3つ以上で100円割引)”
count = gets.chomp.to_i 入力を数値として受け取って変数countに代入
puts “お会計は#{selected_menu.get_total_price(count)}円です” 「お会計は○○円です」となるように出力→選んだメニューの合計金額(戻り値)
コメント