なんでなんだよRuby――初めて触って混乱したポイント5つ
こんにちは、しがないエンジニアの k_y16 です。
Rubyを触り始めてまだ日が浅いのですが、「え、そうなるの!?」という瞬間が多すぎて笑ってしまったので、備忘録がてらまとめます。
温度感としては「なんでなんだよ」寄りです。
1. 本当に型がない
これは定番ですね。
TypeScriptやJavaの世界から来ると「型って絶対いるでしょ」という感覚があるんですが、Rubyにはない。
戻り値の型も引数の型も誰も保証してくれない。
その結果「これnil返ってこないよね?」みたいな心配を常にすることに…。
2. importとかuseとかなくても動く
「このクラスどこから来た?」ってなるのに普通に動く。
requireやimportが基本な世界から来ると、Ruby(Rails)のマジック感がすごい。
autoloadやconventionのおかげなんですが、初見は「なんで読み込まれてるんだよ」ってなりました。
3. 関数名の末尾の!や?は演算子じゃない
最初 if user.active?
を見たとき「active
っていう関数があると思ったのに、?はどこから来た?」と混乱。
実はただの関数名の一部。
つまり active?
という名前の関数が定義されているだけでした。
「?ついてるのに比較演算子じゃないの!?」って気持ちになったのは自分だけじゃないはず。
4. !や?はあくまで慣習
さらに調べたら「!?」が特別扱いされてるわけじゃなくて、ただの命名ルール。
destroy!
って書いてあるからといって「強制削除の演算子」みたいなものではなく、単なる「例外投げる版だよ」というRubyの流儀。
そして重要なのが、?がついているからといってbooleanにキャストされるわけではないこと。
empty?
はtrue/falseを返すけど、それは「そういう文化」なだけでRubyが保証してるわけじゃない。
つまり信じるしかない。
5. returnなくても値が返ってくる
関数の最後に書いた式がそのまま返る。
「え、returnしなくていいの?」と驚いたし、慣れるどころか一生なれない気がしている…。
毎回「本当にこれ返ってる?」と疑ってしまう。
まとめ
Rubyには「型がない」「マジックが多い」「命名の文化が独特」という3点セットがあって、初学者を混乱させにきます。
ただ、最初にRubyから入った人にとっては「直感的でわかりやすい」と感じられるのかもしれません。
むしろ他の言語で経験を積んできたエンジニアほど「なんでなんだよ」と混乱させられる言語だなと強く思いました。

スペースを簡単に貸し借りできるサービス「スペースマーケット」のエンジニアによる公式ブログです。 弊社採用技術スタックはこちら -> whatweuse.dev/company/spacemarket
Discussion