インスタンス変数について
重要なポイント
- クラスの
.newメソッドを呼び出してオブジェクトのインスタンスを作成すると、インスタンスの状態を初期化するために、.initializeメソッドにすべての引数が渡されます。
- インスタンス変数の名前には、先頭に
@が付きます。
- インスタンス変数は、明示的に値を設定するまで、デフォルトでは
nilです。
- インスタンス変数はデフォルトではプライベートなので、ゲッターとセッターを使って操作するのがよいでしょう。
class Backpack
initialize(owner)
@owner = owner
end
def owner
@owner
end
def owner=(new_owner)
@owner = new_owner
end
end
- 名前の末尾に
=が付いたメソッドは、Rubyによってセッターとして認識されます。また、代入構文をシンタックスシュガーとして使えるようになり、たとえばBackpack.new("Sven").owner = "Ayah"のように書けます。
ownerと=の間にはスペースがありますが、実際のメソッド名はowner=であることに注目してください。
- ゲッターとセッターは、
attr_reader、attr_writer、attr_accessorメソッドを使って作成できます。
-
attr_reader:指定したシンボルのゲッターを作成します
-
attr_writer:指定したシンボルのセッターを作成します
-
attr_accessor:指定したシンボルのゲッターとセッターを作成します
class Backpack
attr_accessor :owner
initialize(owner)
@owner = owner
end
end
- インスタンス変数を直接使わずに、ゲッターとセッターを使うのはなぜでしょうか?
- 前の例で
@ownarのように打ち間違えると(これを「タイポ」と呼びます)、エラーは出ずにそのまま処理が進んでしまい、システムにバグを潜り込ませる可能性があります。
- ゲッターとセッターを使うとこれが明示的になり、タイポをするとエラーが発生します
参考文献
オブジェクトのインスタンスの初期化
インスタンス変数