Ruby アクセス メソッド
Ruby アクセス メソッド
アクセス メソッド
- インスタンス変数の値を読み書きするメソッドのこと
例題1
- インスタンス変数@nameを、クラスの外部から参照したい。
class Car
def initialize(name)
@name = name
end
def hello
puts "Hello! I am #{@name}"
end
def name
@name
end
end
car = Car.new('Kitt')
car.hello
# car.name
puts car.name
initialize Method : クラスの生成者で 'Car'オブジェクトが生成される時に呼ぶ出されます。
hello Method : name を受けてインスタンス変数 @name に割り当てる
name Method : @name インスタンス変数の値を 返還するメソッド
例題2
- インスタンス変数@nameの値を、クラスの外部から書き換えたい。
class Car
def initialize(name)
@name = name
end
def hello
puts "Hello! I am #{@name}"
end
def name
@name
end
def name=(value)
@name = value
end
end
car = Car.new('Kitt')
car.hello
# car.name
puts car.name
# car.@name = 'AR'
car.name = 'AR'
puts car.name
name=(value) : Rubyで提供する、 書き込み専用アクセスメソッドと同様の役割を果している。
アクセス メソッド
- Rubyではattr_reader、attr_writer、attr_accessorメソッドを使用して簡単に読み取り、書き込み、読み取り/書き込みアクセスメソッドを作成できる。
- attr_readerは読み取り専用アクセスメソッドを生成します(例:nameメソッド)。
- attr_writerは書き込み専用アクセスメソッドを生成します(例:name=メソッド)。
- attr_accessorは読み取りと書き込みの両方が可能なアクセスメソッドを生成します。
- attr_accessorメソッド
- インスタンスメソッドを開発者が書かなくて良くなる。
class Car
# attr_accessor :name
# attr_reader :name
attr_writer :name
def initialize(name)
@name = name
end
def hello
puts "Hello! I am #{@name}"
end
# def name
# @name
# end
# def name=(value)
# @name = value
# end
end
car = Car.new('Kitt')
car.hello
# car.name
puts car.name
# car.@name = 'AR'
car.name = 'AR'
puts car.name
1) attr_reader
- このメソッドは読み取り専用アクセスメソッドを生成する。 attr_readerで指定されたインスタンス変数は外部から値を得ることができるが、値を変更することはできない。
class Person
attr_reader :name
def initialize(name)
@name = name
end
end
person = Person.new("AR")
puts person.name
2) attr_writer
- このメソッドは、書き込み専用アクセスメソッドを生成する。 attr_writerで指定されたインスタンス変数は外部から値を変更できるが、値を直接取得することはできない。
class Person
# attr_reader :name
attr_writer :name
# def initialize(name)
# @name = name
# end
end
# person = Person.new("AR")
# puts person.name
person = Person.new
puts person.name = "Bob"
3) attr_accessor
- このメソッドは、読み取りと書き込みの両方を可能にするアクセスメソッドを生成する。 attr_accessorを使用すると、インスタンス変数に対するgetterとsetterメソッドの両方が生成される。
class Person
# attr_reader :name
# attr_writer :name
attr_accessor :name
# def initialize(name)
# @name = name
# end
def initialize(name)
@name = name
end
end
# person = Person.new("AR")
# puts person.name
# person = Person.new
# puts person.name = "Bob"
person = Person.new("AR")
puts person.name
person.name = "IT"
puts person.name