Ruby on Rails アクションごとの変数名が同じ理由について


例えばですが、以下のように  
アクションごとに変数名を変更しないのはなぜでしょうか？

@a,@b,@c,@dのところがおなじ@messageという変数を使う  
メリットについて教えて下さい。

[code]

    class MessagesController < ApplicationController
      def index
        @a= Message.all
      end
    
      def show
        @b = Message.find(params[:id]) 
      end
    
      def new
        @c = Message.new
      end
    
      def create
        @d = Message.new(message_params)
        
        if @d.save
          flash[:success] = 'Messageが投稿されました'
          redirect_to @d
        else
          flash.now[:danger] = 'Messageが投稿されませんでした'
          render :new
        end
      end
    
      def edit
      end
    
      def update
      end
    
      def destroy
      end
    
      private
    
      def message_params
        params.require(:message).permit(:content)
      end
    end
    
[/code]




自由な変数名を使って良いです。

チーム開発をする場合はMessageクラスの変数名に別の名前をつけると他に意味があるか考えてしまったりするので中身を説明する変数名をつけることが良い習慣とされています

[code]

    # 悪い例: 犬のクラスなのに猫？
    @cat = Dog.find(params[:id])
    
[/code]

また今回例示頂いたような短い変数名は小さな関数の中では読み間違うことはほぼないため、利用して良いと思います(RailsだとViewで利用するので見かけよりでかかったりしますが）

[code]

    # Messageのインスタンス変数なので頭文字のm
    def show
      @m = Message.find(...)
    end
    
[/code]

なぜ`@message`を使うかを書いてみます。

Railsは規約に従うことコード量を少なくシンプルな記述で書けます。ルールに沿って書くことでコードを書く際に考えることが少なくできるわけです。つまりMessageモデルを扱うコントローラやビューでは`@message`や`@messages`の変数名とすることで考えることが減ります。プログラムを書くときに変数名を何とするか迷うことはとても多いので、パターンが決まってると時間短縮になり、あとあと自分で読む場合や他人が読む場合も変に疑うことがなくなります。

思いついたままに書きましたが参考になれば幸いです

* * *

補足ですがコレクションを扱う `index` アクションでは一般的に複数形の @messages になります。

[code]

    def index
      @messages = Message.all
    end
    
[/code]

