ゲッターや、セッターを調べていたら
まずインスタンス変数の外部操作がでてきたので
そこをまず調べてみる
##インスタンスメソッドの定義
クラス構文の内部でメソッドを定義すると、そのメソッドは
インスタンスメソッド
になります
そのクラスのインスタンスに対して、呼び出すことができるメソッドのこと
class User
def hello
"Hello!"
end
end
user = User.new
user.hello #=> "Hello!"
##インスタンス変数とアクセサメソッド
クラスの内部では、インスタンス変数に使うことができます
インスタンス変数とは、同じインスタンスの内部で共有される変数のこと
class User
def initialize(name)
@name = name
end
def hello
"Hello, I am #{@name}"
end
end
user = User.new('太郎')
user.hello #=> "Hello I am 太郎"
ローカル変数では、値を代入する前にいきなり参照してもエラーにならない
class User
def initialize(name)
# インスタンス変数の代入をコメントアウトしてみる
# @name = name
end
def hello
"Hello, I am #{@name}"
end
end
user = User.new('太郎')
#@nameを参照すると、「nil」になる、つまり名前の部分に何も出力されない
user.hello #=> "Hello I am "
なので、タイポとかにも気をつける
###参照用メソッド、「ゲッターメソッド」
インスタンス変数は、クラスの外部から参照できない
もし、参照したい場合は参照用のメソッドを作成する必要がある
インスタンス変数をクラス内から参照するメソッドが「ゲッター」です。
class User
def initialize(name)
# インスタンス変数の代入をコメントアウトしてみる
# @name = name
end
#@nameを外部から参照するメソッド、ゲッター
def name
@name
end
end
user = User.new('太郎')
user.name #=> "太郎"
###変更用メソッド、「セッターメソッド」
また、インスタンス変数の内容を外部から変更したい場合も
変更用のメソッドを定義する必要がある
インスタンス変数をクラス内で更新するメソッドが「セッター」です。
class User
def initialize(name)
# インスタンス変数の代入をコメントアウトしてみる
# @name = name
end
#@nameを外部から参照するメソッド
def name
@name
end
#@nameを外部から変更するメソッド
def name=(value)
@name = value
end
end
user = User.new('太郎')
#変数に代入しているように見えるが実際には、メソッドを呼び出している
user.name = 次郎
user.name #=> "次郎"
##参考記事、書籍
チェリー本