Flutter – Dart を学ぶ際に押さえておきたい「?」と「!」
2023/03/16 2023/08/01
「?」と「!」について、どういう時に使うのか例をあげて説明します。プログラム中の「?」や「!」がどういう意味なのかわからなかったり、もやっとしている方におすすめ記事です。
Flutter(Dart言語)での使い方ですのでお間違いなく。
目次
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行でかけたりすることもありますよ。
備忘録としても明記しておきました。