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

SEを5年経験後、全くの未経験ながら思い切ってブロガーに転身し、月間13万PVを達成。その後コロナの影響も受け、以前から興味があったWeb系エンジニアへのキャリアチェンジを決意。現在はWeb系エンジニアとして働きながら、プロゲーマーとしても活躍できるように活動中。








シェアはこちらから


【2024年】おすすめのゲーミングPC

モンハンワイルズの発売日とPC版(Steam版)の推薦スペックが公開されたので、おすすめのゲーミングPCをご紹介!


コメントを残す

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