Ruby クラスとインスタンスとスコープの異なる変数

 

 クラス内にはクラスメソッド、イニシャライズメソッド、インスタンスメソッドなんかを定義する。

クラスからインスタンスを生成した瞬間にイニシャライズメソッドは実行される。

要はクラス.newしたら自動で処理なり初期化なりしてくれるって感じ

インスタンスメソッドはクラスから生成したインスタンスが呼び出す物だってところが重要。生成したインスタンス達には個別に入力フォームなんかで値を入れてくからそれぞれ個別の値を持つことになるが、共通して使えるメソッドを持ってるって感じ。

インスタンス変数のスコープはそのクラスの全てのインスタンスメソッド。クラス内のメソッド内に定義する。@付ければいい。ついてなければせっかく入力した内容を変数に代入しても他のメソッドが呼び出せないからほぼ意味なくなっちゃうもんね。インスタンス生成する度に新しいので初期化されるような感じ。

 

クラスインスタンス変数はまだ使い道よくわからんけどクラスの中だけどメソッドの外に定義されている@ついてる変数。クラスメソッドで使用できるけど、インスタンスメソッドでは使用出来ない。見た目はインスタンス変数と変わらないけど定義場所で変わる。今はインスタンス変数とは別物だと考えればいいみたい

 

クラスメソッドはクラスが呼び出すメソッド。defの時にメソッド名の前に.selfをつけて定義する(もちろんクラスの定義内に書く)。よく使うnewとかもクラスメソッド。

 

 

クラス変数はクラス全体で共通する値。@@付ける。インスタンスメソッドでもクラスメソッドでも使えるし、定義場所もあんまり縛りないと思う。いくらインスタンス作っても初期化されない。レビューの感想みたいに毎回初期化して入力するもんじゃなくて、総レビュー数のような部分に使う。もちろん更新はできる。