相変わらずRailsに苦戦中の もそ。
以前書いたコードを一行ずつ分解して復習していますが、改めて見てみると理解があいまいで全然説明できない...。
マトリックスのネオみたいに、私にもプログラミングスキルをインストールしてほしい...。
今日はローカル変数とインスタンス変数について書いていきます。
ローカル変数
プログラムの一部分でしか利用できない変数のこと。
Railsの場合だと、たとえばコントローラファイル内で記述すればコントローラファイル内のみで利用できます。
def destroy
tweet = Tweet.find (params[:id])
if tweet.user_id == current_user.id
tweet.destroy
end
end
こんな感じで、変数名のみを記述します。
インスタンス変数
クラス内の共通の属性として、インスタンスに定義できる変数のこと。
以前、たい焼きにたとえて説明したアレです。
インスタンス変数は、
def edit
@tweet = Tweet.find(params[:id])
end
こんな感じで頭に@をつけて表記します。
で、どう違うの?
とりあえずいろんな種類の変数があることは分かりましたが、いまいち違いのわからない もそ。

「え?一緒じゃん?」とか思いがちですが、もちろんこの2つは性質がまったく違います。
(というか性質が一緒だったらわざわざ違う名前と表記にするメリットないですからね...)
さきほど、ローカル変数は限られた場所でしか利用できないと書きました。
ということは、インスタンス変数はその逆で他のファイルでも使う場合に使います。
もう一度インスタンス変数の書かれたコードを参照してみます。
def edit
@tweet = Tweet.find(params[:id])
end
この記述はtweets_controller.rbというファイルに記述されています。
ということは、ここでコントローラのアクションを定義しているわけですよね。
Railsの処理の流れとして、コントローラはビューに表示をさせる情報を渡します。
つまり、対応するビューファイルに@tweetというインスタンス変数を渡さないといけません。
今回の場合だとview/tweets/edit.html.erbというファイルにインスタンス変数を渡しています。
たとえばdestroyアクションで内容を確認せずに削除する場合は、ローカル変数を使います。
でももし削除内容を確認する画面を表示したい場合は、インスタンス変数を使います。
--
いかがだったでしょうか。
前回はparamsについて書きましたが、私はどうもこの変数の理解がふわふわしているようです。
こんなんでロープレやって大丈夫なのか...?ていうか普通に無理ちゃう??
そんな不安を拭えぬまま、今日もコードと睨めっこを続けるもそであった...続く。