Dart言語 演算子

条件式

  • conditionがtrueならexpr1を計算して返す、そうでなければ、expr2を計算して返す
1
condition ? expr1 : expr2
  • expr1が非nullの時はその値を返す、そうでなければ、expr2を計算して返す
1
expr1 ?? 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; // 結果は「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);
  • nullの可能性がある場合は「…?」を使う
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);

コメント

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×