「nilはnullと違う」より先に気づいたこと
なぜSwiftには「?」がこんなに多いのか?
Swiftを読んでいて、最初に思ったことがあります。
「?(はてな)が多すぎない?」
String?
URL?
text?
title?
どこを見ても ? だらけ。
最初は正直、ちょっと読みにくいなと思いました。
「nil」と「null」の違いを知ったけど…
調べていくと、
- Swiftでは
nil - 他の言語では
null
という違いがあることを知りました。
でも、
「名前が違うだけで、意味は同じじゃない?」
というのが正直な感想でした。
この時点では、
まだ本質は腑に落ちていませんでした。
本当の疑問は、ここだった
改めて思ったのは、これです。
なぜSwiftは、こんなに「?」をたくさん書かせるのか?
これは
- 書きにくさ
- 面倒くささ
の問題ではなく、
設計の思想の問題なんだと気づきました。
「?」は注意マークだった
Swiftでは、
String
と
String?
は、まったく別物です。
-
String
→ 必ず文字が入っている -
String?
→ 入っているかもしれないし、入っていないかもしれない
? は、
「ここ、まだ中身が無いかもしれないよ」
という注意マークでした。
Appleは、クラッシュを何より嫌う
ここで腑に落ちました。
Appleは、
アプリが動いている最中に突然落ちることを
何よりも嫌います。
- ユーザー体験が最悪になる
- 信頼を失う
- 「理由のわからないクラッシュ」が一番怖い
だからSwiftは、
「危ない可能性があるなら、
実行する前に必ず確認させる」
というルールを、
言語そのものに組み込みました。
nil は「使っていい空っぽ」ではない
他の言語の null は、
- 書けてしまう
- 動かしてから落ちる
ことが多いです。
Swiftの nil は違います。
-
nilかもしれないなら?を付ける - 使う前に必ず確認させる
- 確認しないと、そもそも動かせない
つまりSwiftは、
「事故が起きそうなら、
エンジンをかけさせない」
言語なんだと感じました。
たとえるなら:飛行機のチェックリスト
Swiftは、
離陸前チェックを絶対に省略させない飛行機
です。
- 毎回同じ確認
- 慣れると面倒
- 急いでいると飛ばしたくなる
でも、
- 一度事故が起きたら取り返しがつかない
- 「たぶん大丈夫」で空には飛ばない
String? は、
「この計器、正常かまだ確認していない」
という印。
確認しない限り、
エンジンはかかりません。
? が多いのは、
厳しいからではなく、
事故を起こさないためでした。
学びのまとめ
- 「nilとnullが違う」よりも
- 「なぜ
?が多いのか?」に気づけたこと - その理由が
👉 Appleはクラッシュを何より嫌うから - Swiftは
👉 安全を最優先する言語
この順番で理解できたことで、
Swiftのコードが「読みにくいもの」から
**「理由があってそうなっているもの」**に変わりました。
おわりに
? が多いSwiftは、
不親切なのではなく、
とても心配性で、真面目な言語なのかもしれません。
そう思えるようになってから、
Swiftが少し好きになりました。
Discussion