Rubyにおけるシンボルとキーについての関係性について
Railsでストロングパラメータの設定を行う際に、シンボルとキーの理解が整理できていないことに気がついたので、こちらでまとめておこうと思います。
def site_params
params.require(:site).permit(:name, :subtitle, :description, :favicon, :og_image, main_images: [] )
end
私が気になった点は、:subtitle
とmain_images: []
の書き方の違い(:の位置)です。
:subtitle
単一のデータを所有するカラムの記載の仕方。
main_images: []
複数のデータを所有するカラムの記載の仕方。
ストロングパラメータに追加する際は、末尾に追加する。
そうでないと、Railsの規約に従っていないらしく、エラーが出る。
今回の話題は、この:subtitle
、main_images:
の部分について。
キーの種類
:subtitle
、main_images:
これらは、キーという。
キーの種類として①文字列と②シンボルがある。
①文字列
文字列をキーとして使用する場合、キーはダブルクォーテーション("
)またはシングルクォーテーション('
)で囲む。
hash = {"name" => "John Doe", "age" => 30}
特徴
1.文字列はその都度新しいオブジェクトが作成されるため、メモリ使用量が増える。
2.文字列をキーとして使用すると、その文字列の内容が完全に一致する必要がある。
②シンボル
hash = {:name => "John Doe", :age => 30}
hash = {name: "John Doe", age: 30}
特徴
1.シンボルはメモリ内で一意のIDを持つため、同じシンボルを複数回使用しても、メモリ上では一つのオブジェクトを参照することになる。
2.特に大規模なアプリケーションや頻繁にアクセスされるキーに対して、パフォーマンスが向上する。
:
の位置の違いについて
:name
とmain_images:
はどちらもシンボルを指しており、記載の仕方に違いがあるが、それぞれがシンボルであることに変わりはない。
key : value
上記のように、valueの記載(今回は[])も必要なときは、main_images:
のように、キーの後に:
をつける方が可読性の向上面からよく使われる。
まとめ
一般的には、上記の理由からシンボルが使用されることが多い。
※誤りがあれば、教えていただけますと幸いです。🙏
参考記事