条件式
conditionがtrueならexpr1を計算して返す、そうでなければ、expr2を計算して返す
1 condition ? expr1 : expr2
expr1が非nullの時はその値を返す、そうでなければ、expr2を計算して返す
Conditional member access operator「?.」 https://dart.dev/guides/language/language-tour#overridable-operators
オブジェクト(レシーバー)がnullの場合にメソッドを呼ぶとエラーになるので、エラーにせずに戻り値としてnullを返す事が出来る演算子
1 2 String target = null ;var length = target?.trim()?.toLowerCase()?.length ?? 0 ;
カスケード記法 「..」 https://dart.dev/guides/language/language-tour#cascade-notation-
レシーバーのオブジェクトを返す演算子
一時変数を作成する手間が省け、簡潔な記述が出来る
1 2 3 4 5 6 7 8 final addresBook = (AddressBookBuilder() ...name = '山田' ...email = 'test@example.com' ...phone = (PhoneNumberBuilder() ...number = '999-9999-9999' ...label = 'home' ) .build()) .build();
Spreads記法 「…」「…?」 https://dart.dev/guides/language/language-tour#spread-operator
1 2 3 var list = [1 , 2 , 3 ];var list2 = [0 , ...list];assert (list2.length == 4 );
1 2 3 var list;var list2 = [0 , ...?list];assert (list2.length == 1 );
1 2 3 4 5 6 7 8 9 10 11 12 Widget build(BuildContext context) { return CupertionPageScaffold( child: Column( children: [ buildHeader(), ...buildContents(), ...buildContents2(), buildFooter(), ], ), ); }
Collection if
リストに作成時に値を含めるかどうかの条件分岐を記述できる
1 2 3 4 5 6 var nav = [ 'Home' , 'Furniture' , 'Plants' , if (promoActive) 'Outlet' ];
1 2 3 4 5 6 7 8 9 10 11 12 Widget build(BuildContext context) { return CupertionPageScaffold( child: Column( children: [ buildHeader(), ...buildContents(), if (wantContents2) ...buildContents2(), buildFooter(), ], ), ); }
Collection for
リスト作成時に、別のリストを操作しながらリストに追加する処理を記述できる
1 2 3 4 5 6 7 var listOfInts = [1 , 2 , 3 ];var listOfStrings = [ '#0' for (var i in listOfStrings) '#$i ' ]; assert (listOfStrings[1 ] == '#1' );assert (listOfStrings.length == 4 );