LoginSignup
0
2

More than 1 year has passed since last update.

インスタンス変数の2つの特徴について

Last updated at Posted at 2021-12-29

プログラミング学習中です。 
今回はインスタンス変数について備忘録としてまとめてみます。

インスタンス変数とは

 まずインスタンス変数とはクラスの中で、以下のように@変数名とすることで定義することができる特殊な変数のことである。

qiita.rb
class book
  def initialize(title)
    @title = title
  end
end

この@で始まるインスタンス変数は大きく分けて2つの特徴があります。
1つ目は、クラス内の全メソッドで使用する事ができる。
2つ目は、インスタンス毎に違う値を持てる。
です。順番に解説します。

クラス内の全メソッドで使用する事ができる

まずインスタンス変数の1つ目特徴である、「クラス内の全メソッドで使用できる」という事を、コードで見てみます。

qiita.rb
class Book
  def initialize(title)
    @title = title
  end
 
 def output
    puts "好きな本は#{@title}です"
  end
end

user1 = Book.new("ハリーポッター") 
user1.output

# 実行結果
好きな本はハリーポッターです

このように、initializeメソッドで定義した@titleを、outputメソッドでも利用できている事がわかります。

インスタンス毎に違う値を持てる

 次にインスタンス変数の2つ目の特徴である、「インスタンス毎に違う値を持てる」という事をコードで見ていきます。

qiita.rb
class Book
  def initialize(title)
    @title = title
  end
 
 def output
    puts "好きな本は#{@title}です"
  end
end

user1 = Book.new("ハリーポッター") 
user2 = Book.new("三国志")

user1.output
user2.output

# 実行結果
好きな本はハリーポッターです
好きな本は三国志です

このように、user1とuser2では、同じクラスをnewしていても、違うインスタンス変数を使用できている事が分かります。

*補足 インスタンス変数はviewに渡す事もできる

 少し脱線はしますが、ruby on railsにおいてインスタンス変数をcontrollerからviewに渡す事もできます。

books_controller.rb
#コントローラーのサンプルプログラム

class bookController < ApplicationController
  def index
    @title = "ハリーポッター"
  end
end
index.html.erb
#ビューのサンプルプログラム
<p> 
 好きな本は<%= @title %>です。 
</p>

rails sでサーバーを立ち上げ、localhost:3000のindexにアクセスすると、
image.png
と出力されている事から、controllerからview にインスタンス変数を渡せている事が分かります。

このように、controllerにインスタンス変数を指定することで、controllerに紐づくviewファイル内で値を受け取る事ができます。

*ruby on railsにおいて、なぜインスタンス変数をviewで受け取る事ができるのかについては、こちらの記事に詳しく書いております。
https://attonblog.blogspot.com/2016/12/okinawarb-advent-calendar-2016-12-06.html

まとめ

 以上インスタンス変数についてまとめました。インスタンス変数の特徴としては、
1つ目は、クラス内の全メソッドで使用する事ができる。
2つ目は、インスタンス毎に違う値を持てる。
ということです。

インスタンス変数を利用することで、大枠は同じだけど、値は違うという便利な実装ができます。
補足として、ruby on railsにおいてcontrollerで宣言したインスタンス変数をviewで受け取るという実装もできます。

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