#コロン(:)と少しだけ仲良しになったという話
前から思ってたんです。rubyにおける「 ” : (コロン)” がややこしい!」と。
今日は、” : “の位置が原因で起きたエラーのおかげで学んだことをアウトプットします。
結論: シンボルは「文字列の皮を被った数値」である。trueはシンボルで書かなくていい。
###▼エラー状況
rails routesをターミナルで実行した際以下のエラー文が出た(省略してます)
rb:45:in `presence': wrong number of arguments (given 1, expected 0) (ArgumentError)
###▼エラー理由
user.rb に書いたバリデーションで
正:presence: trueを → 誤:presence :trueとしていたため。
(:の位置が間違ってた)
参考記事:https://diveintocode.jp/blogs/Technology/ErrorCollection
###▼わかってなかったこと
シンボル(:hoge)とは何か?逆に hoge: とするのはどういう意味か?
###▼シンボルについてわかったこと
・ :hoge ←これがシンボル。
・表面上は文字列っぽいので、プログラマにとって理解しやすい。
・内部的には整数なので、コンピュータは高速に値を比較できる。
→シンボルは「文字列の皮を被った数値」のこと。
・ハッシュのキーとしてよく使う。
・クラス名/メソッド名/変数名/定数名は定義すると勝手にシンボルを作って検索に備えている。
・メモリの使用効率が良い。
・イミュータブルなので、勝手に値を変えられる心配がない。
参考記事:
・https://programming-dojo.com/%E3%80%90ruby%E5%85%A5%E9%96%80%E3%80%91%E3%82%B7%E3%83%B3%E3%83%9C%E3%83%AB%EF%BC%88%E3%82%B3%E3%83%AD%E3%83%B3%E8%A8%98%E5%8F%B7%EF%BC%89/
・https://www.sejuku.net/blog/13094
###▼trueについて深掘りしたこと
:trueでエラーが発生した
→ trueはシンボルにする必要がない。
presence: 〇〇←ここでのコロンの意味は
presence「は」〇〇(英語で言う” isとかare “)かなと思った。
今回はpresenceが真か偽かを判別したかったけど、コロンの位置が変でそれができなかったから上記のエラーが出たのかなぁ。
###▼感想
エラーが出ることで深まることがあるなぁということ。なんとなく「シンボルで表記してるなぁ」「コロンよく出てくるなぁ」くらいで考えてたけど、今回深く考える機会がもらえてよかった。
それにしても、コロンの位置がちょっとずれただけでrails routes出来なくなったりするんだから恐ろしいよね。
あとは、trueをシンボルにしない理由のところはあんまりうまくアウトプットできてないのは悔しい。もっと理解深い人いたら、ぜひ教えて欲しいです。