📙

「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