こんにちは。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クラスインスタンス変数を表示:こんにちは。
実行結果の通り、クラスインスタンス変数はスーパークラスとサブクラスで同じ名前でも別の変数になります。
つまり、クラスインスタンス変数はスーパークラスとサブクラスで変数の内容が共有されません。
まとめ
- クラスインスタンス変数とは、クラス自身のインスタンス変数
- クラスインスタンス変数の書き方は、クラス構文の直下に@から始まる変数を定義する
- クラスインスタンス変数は、クラス構文の直下やクラスメソッドの内部から操作できる
- クラスインスタンス変数は、クラスの継承の際にスーパークラスとサブクラスで変数の内容が共有されない
- 関連記事
The following two tabs change content below.



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

最新記事 by Tomoyuki (全て見る)
- モンハンワイルズ攻略まとめ【MHWilds】 - 2025年3月30日
- モンハンワイルズでおすすめのライトボウガン装備まとめ【MHWilds】 - 2025年3月29日
- モンハンワイルズでおすすめの太刀装備まとめ【MHWilds】 - 2025年3月9日
コメントを残す