LoginSignup
2
1

More than 3 years have passed since last update.

attr_accessorに関して

Last updated at Posted at 2020-01-25

はじめに

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は凄く自由な書き方が出来て面白いと感じます!
(ただ、これが大規模開発には向かないと言われるところなんでしょうか)

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1