LoginSignup
1
0

More than 3 years have passed since last update.

Ruby インスタンス変数を外部から操作する

Last updated at Posted at 2020-12-07

ゲッターや、セッターを調べていたら
まずインスタンス変数の外部操作がでてきたので
そこをまず調べてみる

インスタンスメソッドの定義

クラス構文の内部でメソッドを定義すると、そのメソッドは
インスタンスメソッドになります
そのクラスのインスタンスに対して、呼び出すことができるメソッドのこと

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 #=> "次郎"

参考記事、書籍

チェリー本

1
0
3

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
1
0