null安全
読み:ナル-あんぜん
外語:null safety
nullが原因となるエラー(NullPointerExceptionなど)を発生させないようにするための仕組み。
概要
もし言語仕様としてnullが存在しなければ、必然的にNullPointerExceptionも発生しない。
しかしnullが全く扱えないというのは時として困るので、nullを扱える変数(nullable)と扱えない変数(non-null)に分け、nullを扱える変数(nullable)の場合はnullが生じうる箇所はnullチェックの構文を必須とし、さもなくばコンパイルが通らないようにすることでプログラマーの勘違いによるバグの混入を防ぐ。
これが、null安全を謳うプログラミング言語に共通して見られる傾向である。
特徴
基本的な仕様
null安全のプログラミングの仕様は概ね次の通りである。
- nullは標準では扱えないようにする。これで安全性が高まる
- ただnullが扱えないと不便で実用性を欠くことになる。null安全性と実用性は両方を達成したいので、nullも扱えるようにする
- nullを扱うには専用の書式が必要で、従わなければビルドが通らない。従ってnullの対応忘れは存在しない
- その文法、書式は、過剰に面倒にはならないよう、簡潔に設計されることが多い (プログラミング言語による)
よくある書式
言語により異なるが、SwiftやKotlinの場合、型名に?を付けてnullable型の変数とし、non-nullであれば.で書くところnullable型の時は?.と書かなければならず、そう書かねばコンパイルエラーとなる。また式としてnullableとなる場合、エルビス演算子などを用いて処理をしないと同様にコンパイルエラーとなる。
このようにして、nullとなり得る状況を放置させず、プログラマーに意識させつつ、かつそのための記述方法をできるだけシンプルにして書きやすく設計したものがnull安全なプログラミング言語、ということになる。
再検索