Menu クラスのインスタンスを作成し、それぞれのインスタンス変数に値を設定して、コンソールで結果を表示します。
class Menu
attr_accessor :name
attr_accessor :price
end
# インスタンスを作成して値を設定
menu1 = Menu.new
menu1.name = "ハンバーガー"
menu1.price = 500
menu2 = Menu.new
menu2.name = "フライドポテト"
menu2.price = 250
# 結果を表示
puts "メニュー1: #{menu1.name} - ¥#{menu1.price}"
puts "メニュー2: #{menu2.name} - ¥#{menu2.price}"
上記のコードを実行すると、以下のような結果がコンソールに表示されるでしょう:
メニュー1: ハンバーガー - ¥500
メニュー2: フライドポテト - ¥250
この例では、Menu クラスのインスタンスを作成し、name と price のインスタンス変数に値を設定しています。そして、それぞれのメニューの情報をコンソールに表示しています。
attr_accessorとは
attr_accessor は、Rubyプログラミング言語において、インスタンス変数にアクセスするためのゲッター(getter)メソッドとセッター(setter)メソッドを自動的に生成するための便利なメソッドです。これにより、オブジェクトのプロパティを簡単に読み取ったり、変更したりすることができます。
具体的には、attr_accessor を使うことで、次のようなことが可能になります:
ゲッターメソッド(getter)の生成: インスタンス変数の値を取得するためのメソッドが自動的に生成されます。例えば、attr_accessor :name を使うと、name インスタンス変数にアクセスするための name メソッド(ゲッター)が生成されます。
セッターメソッド(setter)の生成: インスタンス変数の値を設定するためのメソッドが自動的に生成されます。例えば、attr_accessor :price を使うと、price インスタンス変数に値を設定するための price= メソッド(セッター)が生成されます。
以下は、attr_accessor の使用例です:
class Menu
attr_accessor :name
attr_accessor :price
end
menu = Menu.new
menu.name = "ハンバーガー" # セッターメソッドを使用してnameを設定
menu.price = 500 # セッターメソッドを使用してpriceを設定
puts menu.name # ゲッターメソッドを使用してnameを取得して表示
puts menu.price # ゲッターメソッドを使用してpriceを取得して表示
このようにすることで、インスタンス変数の値に対して直接アクセスするのではなく、ゲッターメソッドとセッターメソッドを介してプロパティにアクセスすることができます。これにより、プロパティの制御や変更の際に追加のロジックを組み込むことが容易になります。
インスタンスメソッドの中でインスタンス変数を扱う
インスタンスメソッドの中では、特殊な変数「self」を用いて「self.変数名」とすることで、インスタンス変数を扱うことができるようになります。
インスタンスメソッドでは、変数「self」に、呼び出したインスタンス自身が代入されています。
class Person
def initialize(name)
@name = name
end
def greet
puts "こんにちは、私は#{@name}です!"
end
end
# インスタンスを作成
person1 = Person.new("Alice")
person2 = Person.new("Bob")
# インスタンスメソッドを呼び出して挨拶を表示
person1.greet
person2.greet
コンソール結果
こんにちは、私はAliceです!
こんにちは、私はBobです!
合計金額を求めるメソッド
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
end
return total_price
end
end
menu1 = Menu.new
menu1.name = "ピザ"
menu1.price = 800
menu2 = Menu.new
menu2.name = "サラダ"
menu2.price = 300
puts menu1.info
puts "合計価格(3個): ¥#{menu1.get_total_price(3)}"
puts menu2.info
puts "合計価格(2個): ¥#{menu2.get_total_price(2)}"
コンソール
ピザ 800円
合計価格(3個): ¥2300
サラダ 300円
合計価格(2個): ¥600
initializeメソッド
initializeメソッドは、「クラス名.new」でインスタンスを生成した直後に自動で呼び出されます。
class Menu
attr_accessor :name
attr_accessor :price
def initialize
self.name = "ハンバーガー"
self.price = 500
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
puts menu1.info
上記のコードを実行すると、以下のような結果がコンソールに表示されるでしょう:
ハンバーガー 500円
この例では、Menu クラスの initialize メソッドによって、新しい Menu オブジェクトが作成される際に自動的に初期値が設定されます。その後、info メソッドを呼び出して戻り値を表示しています。
initializeメソッドでインスタンス変数に値を代入する
キーワード引数を使うことで見やすく書くことができます。
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: 750)
menu2 = Menu.new(name: "ハンバーガー", price: 500)
puts menu1.info
puts menu2.info
コンソール
カレーライス 750円
ハンバーガー 500円
インスタンスの配列
# animal.rb
class Animal
attr_accessor :name
attr_accessor :species
def initialize(name:, species:)
self.name = name
self.species = species
end
def info
return "#{self.name} (#{self.species})"
end
end
# main.rb
require "./animal"
animal1 = Animal.new(name: "チーター", species: "哺乳類")
animal2 = Animal.new(name: "ワニ", species: "爬虫類")
animal3 = Animal.new(name: "ワシ", species: "鳥類")
animal4 = Animal.new(name: "カエル", species: "両生類")
# 変数animalsを定義して配列を代入してください
animals = [animal1, animal2, animal3, animal4]
# animalsに対して繰り返し処理を実行してください
animals.each do |animal|
puts animal.info
end
上記のコードを実行すると、以下のような結果がコンソールに表示されるでしょう:
チーター (哺乳類)
ワニ (爬虫類)
ワシ (鳥類)
カエル (両生類)
この例では、Animal クラスを別ファイルに定義し、require を使ってメインスクリプトで使用しています。そして、animals 配列にインスタンスを格納し、それぞれの動物情報を繰り返し表示しています。
gets.chomp 入力を受け取る
「gets.chomp」で入力された値を受け取ることができるが、実はこれは文字列になるため、仮に「3」と入力しても文字列の"3"になってしまいます。
数値の計算などに用いる場合は、これを数値に変換する必要があります。
そのためには、「gets.chomp.to_i」とすることで、入力された内容を数値に変換し、計算などにも使えるようになります。
puts "名前を入力してください"
name = gets.chomp
puts "#{name}さん、いらっしゃいませ"
puts "1つ50円のお菓子があります"
puts "いくつ買いますか?"
count = gets.chomp.to_i
total_price = count * 50
puts "お会計は#{total_price}円です"
コンソール
名前を入力してください
John
Johnさん、いらっしゃいませ
1つ50円のお菓子があります
いくつ買いますか?
3
お会計は150円です