😇

なんでなんだよ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から入った人にとっては「直感的でわかりやすい」と感じられるのかもしれません。
むしろ他の言語で経験を積んできたエンジニアほど「なんでなんだよ」と混乱させられる言語だなと強く思いました。


スペースマーケット Engineer Blog

Discussion