car.rb
class Car
def initialize(color)
@color = color
end
# ゲッター
def color
@color
end
# セッター
def color=(color)
@color = color
end
end
# インスタンス化する際にinitializeメソッドに値を渡す
car1 = Car.new("red")
car2 = Car.new("green")
car3 = Car.new("blue")
# car1.color = "gray"
# colorを呼び出すと代入された値が表示される
puts car1.color
puts car2.color
puts car3.color
↑こういうrbファイルがあったとする。
これをターミナル上で実行ruby car.rbすると下記のような結果になる
red
green
blue
疑問に思ったこと
initialize(color) は引数(color)で
car1 = Car.new("red")の("red")を受け取ることができている。
「えっ・・・これセッターを書く意味ある?」と疑問に思ったのだ。
試しにセッターをコメントアウトして、再度ターミナルの結果を見てみる
car.rb
class Car
def initialize(color)
@color = color
end
# ゲッター
def color
@color
end
# セッター
# def color=(color)
# @color = color
# end
end
# インスタンス化する際にinitializeメソッドに値を渡す
car1 = Car.new("red")
car2 = Car.new("green")
car3 = Car.new("blue")
# car1.color = "gray"
# colorを呼び出すと代入された値が表示される
puts car1.color
puts car2.color
puts car3.color
結果↓
red
green
blue
「えっ・・・これホンマにセッター書く意味ないやん、、、
試しにcar1.color = "gray" でcar1.colorの値もちゃんと返ってくるか確かめてみよ」
car.rb
class Car
def initialize(color)
@color = color
end
# ゲッター
def color
@color
end
# セッター
# def color=(color)
# @color = color
# end
end
# インスタンス化する際にinitializeメソッドに値を渡す
car1 = Car.new("red")
car2 = Car.new("green")
car3 = Car.new("blue")
car1.color = "gray" #ここのコメントアウト外した
# colorを呼び出すと代入された値が表示される
puts car1.color
puts car2.color
puts car3.color
結果↓
Traceback (most recent call last):
class.rb:22:in `<main>': undefined method `color=' for #<Car:0x00007ffe6b172520 @color="red"> (NoMethodError)
Did you mean? color
「おっ!エラーはいた。(良かった〜)」
わかったこと
initializeメソッドは初期値を受けとれるだけ。
なので今回のcar1.color = "gray"のように後から代入する可能性も考えると
セッターの記述は必要。
ちなみにセッターのコメントアウトも外して、再度実行するとcar1.colorの出力値を更新することができた。
car.rb
class Car
def initialize(color)
@color = color
end
# ゲッター
def color
@color
end
# セッターのコメントアウトを外した
def color=(color)
@color = color
end
end
# インスタンス化する際にinitializeメソッドに値を渡す
car1 = Car.new("red")
car2 = Car.new("green")
car3 = Car.new("blue")
car1.color = "gray"
# colorを呼び出すと代入された値が表示される
puts car1.color
puts car2.color
puts car3.color
結果↓
gray
green
blue
オブジェクト指向って難しいね〜(大満足)