Rubyのインスタンス変数を使用例をもとに現役エンジニアが解説【初心者向け】

初心者向けにRubyのインスタンス変数について解説しています。これはインスタンスごとに固有の値を持った変数のことです。クラス変数との違いと使用例について見ていきましょう。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

Rubyのインスタンス変数について解説します。

Rubyについてそもそもよく分からないという方は、Rubyとは何なのか解説した記事をまずご覧ください。

 

なお本記事は、TechAcademyのWebアプリケーションオンラインブートキャンプの内容をもとに紹介しています。

 

田島悠介

今回は、Rubyに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

インスタンス変数について詳しく説明していくね!

大石ゆかり

お願いします!

 

インスタンス変数とは

今回はRubyのインスタンス変数について紹介していきたいと思います。

まず、似たような変数でクラス変数というのがありますが、ここでインスタンス変数とクラス変数の違いについて説明していきましょう。

 

インスタンス変数とは「インスタンス毎に別々の値を保持することのできる変数」のことを言います。

これに対しクラス変数とは「同じクラスから生成されたインスタンス毎に共通する値」です。

 

つまり要約すると、インスタンス変数とクラス変数の決定的な違いは、インスタンス毎の値がそれぞれ、独自のものかどうかということになります。

また、インスタンス変数はオブジェクトの外から直接アクセスすることができないため、クラスにメソッドを定義する必要性があります。

その定義したメソッドを通じてインスタンス変数にアクセスするということとなります。

 

インスタンス変数の使用例

インスタンス変数とは上記でも説明した通り、同じインスタンス内部において共有できる変数のことです。

書き方は

 

@変数名

 

で必ず@からは始まります。

また、インスタンス変数はインスタンス毎の独自の値ですから、同じクラスから生成された、インスタンス間におけるインスタンス変数はお互いに影響しあわないということとなります。

従って、インスタンス毎に独自の値をもたせたい時などはインスタンス変数を用いると良いでしょう。

 

[PR] Rubyのプログラミングで挫折しない学習方法を動画で公開中

実際に書いてみよう

それでは、実際に書いてみましょう。

以下のコードを見てください。

 

class Romancecar

  def initialize(name)
    @name = name
  end

  def start
    puts "特急ロマンスカー#{@name}はちょーカッコイイ!!"
  end
end

gse = Romancecar.new("GSE")
gse.start

 

ここで少し話はそれますがinitializeメソッドは、インスタンス生成の時に初期値として入れる値を定義したメソッドとなります。

従ってここでは、引数として渡されたnameが@nameへとインスタンス変数として渡されるということが定義されています。

その渡されたインスタンス変数を、def start で使用して定義しているということになります。

 

gse = Romancecar.new("GSE")

 

でgseというインスタンスを生成し、引数として”GSE”を渡しています。

 

gse.start

 

でメソッドを呼び出していますので、メソッドの定義の中の

 

puts "特急ロマンスカー#{@name}はちょーカッコイイ!!"

 

にある@nameというインスタンス変数には、def initialize で定義した “GSE”が入るので結果として

 

特急ロマンスカーGSEはちょーカッコイイ!!

 

と表示されることとなるのです。

ここでもおわかりのように、使用されているインスタンス変数の値はこのgseというインスタンス独自のものとなることも確認できると思います。

ご参考になれば幸いです。

 

筆者プロフィール

町田 耕

学生時代は会計学専攻。塾講師勤務を経て、企業のCFOとして会社経営に携わる。

会社経営から一線を退いた後、インフラエンジニアの妻の勧めでプログラミングを

独学で始め、プログラミングセミナーなど転々としながら、開発案件に携わるようになる。

現在、フリーランスとして活動しながらテックアカデミーのメンターも勤めている。

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

TechAcademyでは初心者でも最短4週間でエンジニアになれるRuby on Railsオンラインブートキャンプを開催しています。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間でオリジナルWebサービスを開発することが可能です。

また、現役エンジニアから学べる無料のプログラミング体験会も実施しているので、ぜひ参加してみてください。