ITミュージアム

Flutter – Dart を学ぶ際に押さえておきたい「?」と「!」

2023/03/16 2023/08/01

「?」と「!」について、どういう時に使うのか例をあげて説明します。プログラム中の「?」や「!」がどういう意味なのかわからなかったり、もやっとしている方におすすめ記事です。

Flutter(Dart言語)での使い方ですのでお間違いなく。

目次

  1. ?(null許容)
  2. ?(条件式)
  3. ??(演算子)
  4. ! (アサーション演算子)
  5. !(否定演算子)

1. 「?」(null許容)

型を宣言する際に使います。

int?
String?

型に ? がついていると null も許容します。
ついていない場合は、null は不可

基本的に、Flutter3 以降は、null安全という形がとられているため、デフォルトnull不可です。

ただし、その後にnullではないことが明らかな場合は、その限りではありません。

1-1. null許容にする際、気を付けること

(例)

class User {
  String? name;
}

(1) nullじゃないことを確定させるために「!」を使う必要がある

Text(user.name!)

(2) nullだった場合、何を入れるかを「??」を使って書く必要がある

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

(3) nullになってもいい場合「?」を書く

print(user.name?.trimRight());

(PR)

2. 「?」(条件式)

condition ? et1 : et2

condition(条件)が true なら et1 そうでなければ et2

3. 「??」(演算子)

左辺が null の場合に右辺の値を返します。C#では Null合体演算子 ともいうらしいです。

et1 ?? et2

et1 が null でなかったら -> et1
et1 が null だったら -> et2

たとえば、以下は名前がなければ、Guestと表記します:

String playerName(String name) => name ?? 'Guest';

4. 「!」(アサーション演算子)

その値がnullではないことがわかっている場合に使います。

null許容変数に代入しても問題がないということをDartに伝えられます。

null許容な式をnull非許容な変数に代入したい場合、式の直後に ! を追加することで代入可能です。

現在は、先ほども触れましたが、null安全 となっていますので、やむを得ない理由でアサーション演算子を使用する場合は、その値が決してnullにならないことを確認することが大事です。

でないと、Flutterからすごくエラーを出されます。。

(例)

Text(user.name!)
id: coin.id!

5. 「!」否定演算子

boolean型の変数の前につけると意味が反転します(falseをtrueに変える、あるいはその逆)。

!et

まとめ

Flutter (Dart言語)は、null不可なのですが、データがあることが確実であればOKだったりします。柔軟に書いていくこともできるので、「?」や「!」を確認しておくとプログラムを書く際に便利だと思います。if文で長いプログラムを書くより、1行でかけたりすることもありますよ。

備忘録としても明記しておきました。

おすすめ記事

(PR)