Qiita初投稿です。
タイトルにもある通りFlutterのリファクタリング等に使えそうな?Dartの文法について書いていきます。
1. ?:
よくある3項演算子です。
bool型である変数a
に対して
if(a) {
print("a");
}else{
print("b");
}
こんなコードがあったときに
a ? print("a") : print("b");
上記のように書くことができます。
FlutterではWidgetをreturnするときとかなどに用いることがあるかと思います。
return loading ? Loading() : Home();
2. ??
変数に異なる値を代入をするときに用いるやつです。
String name = user.name ?? "anon";
とすることで
nameにuser.nameがnullだったときに"anon"という文字列を代入することができます。
この記述をif文とか3項演算子とか使って書くと記述量が増えるのでとても便利だなと思います。
3. ?.
こちらも先ほどに似ておりフィールドがnull出なかったときにその値を返し、そうでない場合にはnullを返します。
よって以下のようになります。
class User {
String name;
int age;
User( this.name, this.age );
}
User user;
int age = user.age; //error
int age = user.age ?? 0; //error
int age = user.?age ?? 0; //OK
4. ??=
左側の変数がnullであったときのみ代入を行ます。
よって以下のような挙動をします。
rubyでいうところの||=
と同じです。
int age;
//ageはnullなので代入される
age ??= 100;
//ageはnullでないため代入されない。
age ??= 50;
print(age) //100
5. ..
(カスケード表記)
User user = new User();
user.name = "tom";
user.age = 30;
上記のようながあった場合に
User user = new User()
..name = "30"
..age = 30;
と記述することができます。
FlutterではSnackBarの表示の時に
Scaffold.of(context)
..removeCurrentSnackBar()
..showSnackBar(SnackBar(content: Text("aaa")));
...とこんな感じで使うことがありました。
カスケード表記に関しては他の方がいろいろ書いているので調べるといろいろでてきます。
6. ...
(スプレッド構文)
JSとかにもありますね。
ある配列に対して、下記のように記述することが可能です。
List<int> list = [3,4,5,6,7];
list = [
1,
2,
...list
];
// list = [1,2,3,4,5,6,7];