\ プログラミング学習奮闘記録 /

Progate学習メモ Ruby④【クラス】

目次

クラスとは?

ものを作り出すための設計図。

設計図のことをクラス「もの」のことをインスタンスと呼ぶ

インスタンスを生成するステップ

STEP
クラスを用意する

①クラスは「class クラス名」で用意できる。

【書き方】

class Menu

 end

ポイント

  • クラス名は大文字で始める
  • 最後に「end」が必要

②クラスの中身を用意する

attr_accessor シンボル」を使う

Menuクラスのインスタンスにnameという情報を持たせることができる

【書き方】

class Menu

 attr_accessor :name  (このnameという情報のことを、インスタンス変数という)

 attr_accessor :price

end

STEP
クラスからインスタンスを生成する

クラス(設計図)を元に、新しくインスタンスを生成するには、「クラス名.new」とする。

【書き方】

class Menu ・・・

end

menu1 = Menu.new

↑Menuからインスタンスを生成して、menu1に代入する

STEP
インスタンスに情報を追加する

インスタンスに情報をもたせるには、クラスで用意したインスタンス変数に値を代入する。

インスタンス.変数名 = 値」とすることで、そのインスタンス変数に値を入れられる。

【書き方】

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 initializemessage

 puts message

 end

end

menu1 = Menu.new(“こんにちは“) 「こんにちは」がmessageに代入される

initializeメソッドでインスタンス変数に値を代入する

キーワード引数を使うとすっきりする。

【書き方】

class Menu

 attr_accessor :name

 attr_accessor :price

def initializename:,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)}円です”  「お会計は○○円です」となるように出力→選んだメニューの合計金額(戻り値)

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次