📘

【Dart】Null Safetyってなに?

2023/04/22に公開

https://dart.dev/null-safety

Null Safetyとは?

Null Safetyは、プログラム内でnullという値を持つ変数に対して、プロパティやメソッドを呼び出そうとするとする際に発生するエラーを防ぐための機能 です。
このエラーは、null参照エラーと呼ばれます。

このようなエラーを防ぐために、Null Safety機能は導入されており、コンパイル時にnullに関する問題を特定し、ランタイムエラーを減らすことができます。

もしNull Safetyがなかったら・・・

コンパイル時に型に関するエラーや警告を検出できないので、実行時にNull Pointer Exceptions(null参照エラー)が発生するリスクが高まります。
それに伴い、nullチェックを手動で行わなければいけなかったり、より多くのテストコードを書く必要性が出てきます。

どうやってnull参照エラーを検出しているのか?

Null Safetyは、型システムがnullを許容する型nullを許容しない型を明確に区別します。これにより、開発者がnullを許容しない変数にnullを代入しようとすると、コンパイル時に警告やエラーが発生します。
また、nullを許容する変数がnullである場合には、関連する処理がスキップされます。
例えば、someVariable?.someMethod()(?をつけるとnull許容型になる)と書くと、someVariableがnullでない場合のみsomeMethod()が呼び出されます。

Dartでは、デフォルトで変数がnullを許容しない型になっています。
ですので、型に疑問符(?)を追加することでnull許容型を宣言できます。例えば、String?はnullを許容する文字列型です。一方、疑問符がない型(例: String)は非null型として扱われ、nullを許容しません。

まとめ

  • Null Safetyはnull参照エラーを防ぐための機能
  • Null Safetyのおかげでランタイムエラーを減らすことができている
  • nullを許容する型、許容しない型が存在している
  • Dartでは、変数の型はデフォルトでnullを許容しない
  • 型に疑問符(?)を追加することでnull許容型を宣言できる
  • nullを許容しない変数にnullを代入しようとすると、コンパイル時に警告やエラーが発生
  • nullを許容する変数がnullである場合には、関連する処理がスキップされる

Discussion