見出し画像

ヌルセーフティ: プログラム内でヌルを安全に扱い、ヌル参照エラーを回避する機能

はじめに

何気なく使っていた、Null Safety(ヌルセーフティ)について、調べたくなったので、備忘録として記載します。
見てくださった方にも、何かの助けになればと思います。

きっかけ

何気なく書いてたコードで、こんなコードがありました。

static File? backgroundImageFile;

File?の'?'って、どんな目的でつけてんだっけ?なんとなくは分かるけど、いざ説明してと言われると自信がないので、説明できるようにしておこうって思ったのがきっかけです。

Null Safety(ヌルセーフティ)の目的とは?

ヌルセーフティの目的は、変数や要素がヌルであるかどうかを静的にチェックし、ヌル参照エラーを回避することです。そのため、変数の型以外にもヌルセーフティを適用することで、コードの安全性と信頼性を向上させることができます。

File? はNullable型であり、File クラスのインスタンスまたは null のどちらかを保持することができます。Nullable型を使用することで、変数がnullである可能性を明示的に示すことができます。

File? の変数を宣言すると、それはFile クラスのインスタンスを保持することもできますし、nullを保持することもできます。ファイルパスがヌルの場合、代入される値は null となります。

以下は使用例です:

File? backgroundImageFile = null; // nullを代入
File? backgroundImageFile = File('path/to/file.jpg'); // Fileオブジェクトを代入

したがって、File? 型の変数は、参照先のファイルパスがヌルである場合、ヌルを保持することができます。これにより、変数の値がnullであるかどうかを明示的に示すことができます。

使用参照例

ヌルセーフティが適用される4つの要素の簡単な例を挙げておきます。

1.変数の型:

String? nullableString; // ヌルを許容するNullable型の変数
int? nullableInt; // ヌルを許容するNullable型の変数
List<String>? nullableList; // ヌルを許容するNullable型のリスト

2.関数の引数と戻り値の型:

void processString(String? input) { // 引数にヌルを許容するNullable型を使用
  if (input != null) {
    // ヌルでない場合の処理
  }
}

String? getString() { // 戻り値としてヌルを許容するNullable型を使用
  // ヌルかもしれない値を返す処理
  return null;
}

3.リストやマップの要素型:

List<int>? nullableIntList; // ヌルを許容するNullable型の整数リスト
Map<String, String>? nullableStringMap; // ヌルを許容するNullable型の文字列マップ

4.クラスのプロパティやメソッドの戻り値やパラメータ:

class MyClass {
  String? nullableProperty; // ヌルを許容するNullable型のプロパティ

  void processValue(int? value) { // ヌルを許容するNullable型のパラメータ
    if (value != null) {
      // ヌルでない場合の処理
    }
  }

  String? getString() { // ヌルを許容するNullable型の戻り値
    // ヌルかもしれない値を返す処理
    return null;
  }
}

まとめ

 ヌルセーフティは、変数や要素がヌルであるかどうかを静的にチェックし、ヌル参照エラーを回避するための安全なプログラミング手法です。
 具体的には、Nullable型を使用して、ヌルを許容するかどうかを明示的に示し、安全呼び出し演算子やnullチェックを使用してヌルに対する操作を安全に行う事ができます。
 これにより、実行時のヌル参照エラーを減らし、コードの安全性と信頼性を向上させる事ができます。

一言で説明すると

ヌルセーフティとは、プログラム内でヌルを安全に扱い、ヌル参照エラーを回避する機能です。

この記事が気に入ったらサポートをしてみませんか?