プログラミング学習中です。
今回はインスタンス変数について備忘録としてまとめてみます。
#インスタンス変数とは
まずインスタンス変数とはクラスの中で、以下のように@変数名とすることで定義することができる特殊な変数のことである。
class book
def initialize(title)
@title = title
end
end
この@で始まるインスタンス変数は大きく分けて2つの特徴があります。
1つ目は、クラス内の全メソッドで使用する事ができる。
2つ目は、インスタンス毎に違う値を持てる。
です。順番に解説します。
#クラス内の全メソッドで使用する事ができる
まずインスタンス変数の1つ目特徴である、「クラス内の全メソッドで使用できる」という事を、コードで見てみます。
class Book
def initialize(title)
@title = title
end
def output
puts "好きな本は#{@title}です"
end
end
user1 = Book.new("ハリーポッター")
user1.output
# 実行結果
好きな本はハリーポッターです
このように、initializeメソッドで定義した@titleを、outputメソッドでも利用できている事がわかります。
#インスタンス毎に違う値を持てる
次にインスタンス変数の2つ目の特徴である、「インスタンス毎に違う値を持てる」という事をコードで見ていきます。
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に渡す事もできます。
#コントローラーのサンプルプログラム
class bookController < ApplicationController
def index
@title = "ハリーポッター"
end
end
#ビューのサンプルプログラム
<p>
好きな本は<%= @title %>です。
</p>
rails sでサーバーを立ち上げ、localhost:3000のindexにアクセスすると、
と出力されている事から、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で受け取るという実装もできます。