📌

【Flutter初心者向け】Dartの!とか?って何?(Null Safety)

2021/10/03に公開

Flutter大学の人は、以下のクノさんが解説してくれている動画を見てみると良いかもしれません。(Flutte大学の有料プランに入ると見れます)
https://flutteruniv.com/materials/lecture_videos/FAgaIHNlaQJND0ObMTBw

その上で本記事では、nullとは?から具体的なnullの扱い方をFlutter(Dart)初心者向けに書きます。

nullとは

基本的には、変数を作ってもその中に値を入れていなかったらnullになります。
以下の画像のイメージでは、みかんを入れていない状態の変数はnullです。

https://twitter.com/KboyFlutterUniv/status/1413437780403834880?s=20

で、Null Safetyっていうのは、変数がnullを許容するかしないかを明示的に書けよ!っていうルールだと思ってもらえればいいと思います。

ということで以下に①null許容じゃない場合と②null許容の場合を解説します。

①null許容じゃない場合

例えば、以下のような変数の例を考えます。まずはString?じゃなくてStringで型指定をしている場合です。

String name;

String?じゃないStringの型の場合は、nullを許容しないのでnullを入れることができません。(小泉進次郎風)

そのため、初期値で何らかの文字列を入れておく必要があります。
以下のようにデフォルトで値を入れるか、classの変数であれば、デフォルト引数としてもらってくる必要があります。

デフォルト値を入れておく場合

String name = 'KBOY';

デフォルト引数としてもらってくる場合

class User {
  String name;

  User(this.name);
}

最初はめんどくさい代わりに、nullが入ってないことが保証されてるので使う時も以下のように!とか?とか使わずに書けます。

Text(user.name)

②null許容の場合

次に、nullを許容する場合の書き方は以下です。

String? name;

「これだとnameにはnullが入っていてもいいよ」というルールになるので、無理にデフォルト値を入れたりしなくてもAndroidStudio等のエディタに怒られることはありません。

その代わり、使うときに気をつけなければいけないことがあります。例えば以下のようなUserクラスがある時に、nameはnullになりうるので、使うときの書き方に工夫が必要です。

class User {
  String? name;
}

null許容の変数を使う時に気をつけること

①nullじゃないと確定させるために!を使う必要がある

Text(user.name!)

②nullだった場合何を入れるかを??を使って書く必要がある

Text(user.name ?? '名無しさん')

③nullになってもいいなら?でかく

print(user.name?.trimRight()); // nameがnullだったらnullがprintで出力される(たぶん)

まとめ

null許容の変数では、nullを入れることが出来るかわりに、後からnullじゃないかチェックを入れなきゃいけなきゃいけなくなるので、面倒臭いこともあります。そのかわりその性質をうまく利用して、ローディングをだし分けたりもできるので、null許容の変数にするかしないかはケースバイケースです。例えば絶対にnullになる意味がない変数に関してはnull許容にすべきではありません。

ということで以上、初心者向けのnull許容の話でした。

Flutter大学の勉強会では、null safetyの特集などもあるので気になる方は見てみてください。

Flutter大学の中の人向け動画リンク
https://flutteruniv.com/materials/lecture_videos/FAgaIHNlaQJND0ObMTBw

入会したい方はこちらから
https://flutteruniv.com

Flutter大学

Discussion