Rubyのクラスインスタンス変数とは?


こんにちは。Tomoyuki(@tomoyuki65)です。

Rubyのクラスにはインスタンス変数やクラス変数ってありますよね。

最近勉強していて知ったんですが、クラスにはクラスインスタンス変数というのもあるんです。

この記事では、そんなクラスインスタンス変数について解説します。

 



クラスインスタンス変数とは?

クラスインスタンス変数とは、クラス自身のインスタンス変数です。

クラスインスタンス変数の書き方は、以下のようにクラス構文の直下に@で始まる変数を定義します。

class
  # クラスインスタンス変数を定義
  @hello = 'Hello'
end

 

クラスインスタンス変数は、クラス構文の直下やクラスメソッドの内部で操作することができます。

例として、以下のプログラムを実行してみて下さい。

class Say_hello
  # クラス構文の直下にクラスインスタンス変数を定義
  @hello = 'Hello'
  puts "クラス構文の直下で操作:#{@hello}"

  def self.call_hello
    puts "クラスメソッドの内部で操作:#{@hello}"
  end

end

# クラスメソッドを実行
Say_hello.call_hello

 

実行結果
クラス構文の直下で操作:Hello
クラスメソッドの内部で操作:Hello

 

実行結果の通り、クラスインスタンス変数はクラス構文の直下やクラスメソッドの内部で操作できます。

 

クラスインスタンス変数の特徴は?

クラスインスタンス変数は、クラスの継承の際にスーパークラスとサブクラスで別々の値を保持します。

例として、以下のプログラムを実行してみて下さい。

class Say_hello
  # クラス構文の直下にクラスインスタンス変数を定義
  @hello = 'Hello'

  def self.call_hello
    puts "クラスインスタンス変数を表示:#{@hello}"
  end

end

# クラスの継承
class Say_sub < Say_hello
  # クラス構文の直下にクラスインスタンス変数を定義
  @hello = 'こんにちは。'
end

# スーパークラスのクラスメソッドを実行
Say_hello.call_hello

# サブクラスのクラスメソッドを実行
Say_sub.call_hello

 

実行結果
クラスインスタンス変数を表示:Hello
クラスインスタンス変数を表示:こんにちは。

 

実行結果の通り、クラスインスタンス変数はスーパークラスとサブクラスで同じ名前でも別の変数になります。

 

つまり、クラスインスタンス変数はスーパークラスとサブクラスで変数の内容が共有されません。

 

まとめ

  •  クラスインスタンス変数とは、クラス自身のインスタンス変数
  •  クラスインスタンス変数の書き方は、クラス構文の直下に@から始まる変数を定義する
  •  クラスインスタンス変数は、クラス構文の直下やクラスメソッドの内部から操作できる
  •  クラスインスタンス変数は、クラスの継承の際にスーパークラスとサブクラスで変数の内容が共有されない

 

 

  • 関連記事

【無料あり】Ruby入門サイトおすすめ3選!初心者向けの学習方法を解説

2017年10月24日

 

The following two tabs change content below.
Tomoyuki

Tomoyuki

元SE。30歳を目前に仕事や将来に悩み、Web業界へ転職を目指すも失敗。 「好きなことで生きる」に憧れてなんのあてもなく仕事を辞め、ガチ初心者からブロガーに挑戦し、月間13.3万PV(上昇中)を達成! ブログでは大好きなパソコン情報をはじめ、様々な役立つ情報を発信中。 そして次はプロゲーマーとしても活動するため、ゲーム練習と合わせて攻略記事を書いたり、YouTubeでも活動中。








シェアはこちらから


ゲーミングPCならBTO

最近はゲーミングPCを購入する人も増えましたが、「どう選べばいいの?」という人も多いですよね。BTOなら自分好みにカスタマイズすることも可能でおすすめなので、ぜひ一度チェックしてみて下さい!



デジタルコンテンツ素材販売店

ひょんなことから、私はiPhoneだけでデジタルコンテンツ(画像や動画など)を作成するチャレンジを始めました。

そこで、試しに自作したデジタルコンテンツの素材販売店をオープンしてみたので、よければぜひ一度チェックしてみて下さい!


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です