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入門サイトはどれ?Rubyの学習方法をまとめる

2017.10.24

 

The following two tabs change content below.
Tomoyuki

Tomoyuki

好きなことで生きたくて、SEを辞めてブロガー&ゲーム実況で活動中。パソコン、ネット、ゲームが大好き。YouTubeのチャンネル登録&Twitterのフォローもぜひお願いします!









好きなことで生きるために

自分の好きなことや、得意なことを仕事にして、
生きていく方法をこのブログで示します。



資産運用ならウェルスナビがおすすめ!

ウェルスナビなら誰でも簡単に自動で資産運用を始められますよ!
まだ資産運用を始めてない人は、ぜひ一度チェックしてみて下さいね。


コメントを残す

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