はじめに
Ruby初心者ですが、attr_accsessorの内容が最初イマイチ理解できず。
徐々に理解が出来たので纏めてみました!
※「この表現が変だよ」などあればコメントお願いします。
attr_accessorとは?
@nameなどのインスタンス変数をクラス外から呼び出し、書き込みを定義するメソッド。
attr_reader, attr_writerとの違い
attr_reader = 呼び出し専用
attr_writer = 書き込み専用
attr_accessor = 両方の機能を兼ね備えている
インスタンス変数とは
インスタンスの中で値を保持する為の変数。
例)
user1 = User.new
Userクラスをnewすることでuser1というインスタンスが作られる。
クラスの中で定義されている「@変数名」がインスタンス変数となる。
使い方
インスタンス変数の内容を、呼び出しと書き込みの両方を行いたい場合はattr_accessorを選択する。
使用例
class User
attr_accessor :name, :age
# attr_accessor :ここにはインスタンス変数名を入れる。(シンボルか文字列で指定)
def initialize(name,age)
# インスタンス変数に名前と年齢が代入される
@name = name
@age = age
end
end
# user1とuser2のインスタンスを作成
user1 = User.new('ルフィー', 19)
user2 = User.new('ゾロ', 21)
# attr_readerで読み出し(以下attr_readerの内容)
puts user1.name
=> ルフィー
# def name
# @name ← ('ルフィー')
# end
# attr_readerで読み出し(以下attr_readerの内容)
puts user1.age
=> 19
# def age
# @age ← (19)
# end
# attr_readerで読み出し(以下attr_readerの内容)
puts user2.name
=> ゾロ
# def name
# @name ← ('ゾロ')
# end
# attr_readerで読み出し(以下attr_readerの内容)
puts user2.age
=> 21
# def age
# @age ← (21)
# end
# attr_writerで書き出し(以下attr_writerの内容)
user1.name = 'フランキー'
# フランキーがuser1.nameに代入される
# def name=(値) ← ('フランキー'が引数で渡される)
# @name ← (インスタンス変数@nameに'フランキー'がセットされる)
# end
# attr_writerで書き出し(以下attr_writerの内容)
user1.age = 36
# 36がuser1.ageに代入される
# def age=(値) ← (36が引数)
# @age ← (インスタンス変数@ageに36がセットされる)
# end
# user1の内容が変更されている
puts user1.name
=> フランキー
puts user1.age
=> 36
最後に
Rubyは凄く自由な書き方が出来て面白いと感じます!
(ただ、これが大規模開発には向かないと言われるところなんでしょうか)