変数の整理(Ruby)
変数が入り混じったときよく混乱します。
よく私が悩むポイントは
・どの範囲まで有効か(スコープ)
・どうやって見分けるか
なので、上記を意識して整理しました。
プロジェクト内どこでも有効。
先頭に$をつける。
あまり使われない
●インスタンス変数
宣言されたクラス内ならどのメソッドでも有効。
インスタンスごとに値は異なる。
先頭に@をつける
●ローカル変数
宣言されたメソッド内やブロック内でのみ有効。
定義のとき先頭に何もつける必要はない
→「普段何気なくみているただの(?)変数はローカル変数」ということを改めて認識!ちなみに有効範囲(スコープ)でについては「有効範囲の外で同じ名前の変数がでてきても、別の変数として認識される」という説明がいちばんしっくりきました。
例その①
name = "Tanaka"
def sample
puts name ←ローカル変数nameの有効範囲内。同じ変数nameとして認識。
end
sample
→ Tanaka と表示
例その②
def sample
puts name
end
name = "Tanaka" ← ローカル変数nameの有効範囲外。異なる変数として認識。
sample
→ エラー
ローカル変数の例をだしましたが、私は今Ruby on Railsの勉強中で、インスタンス変数(@~)もよくでてきます。インスタンス変数は同じクラス内なら異なるメソッドでも同じ変数として認識されることを考えると、index,new, editなどのアクション(同じアクションのコントローラーとビューで同じ変数を扱う)でインスタンス変数が使われている理由がわかりました。
以上です。書いてみると当たり前のこと書いてしまったかも。。。でも勉強になったのでこれからもアウトプット少しずつ頑張ります😁