既にこれまで示されていたように
=
演算子を使って値を代入できる。代入先の変数が
null
の時に限り、
??=
演算子を使う。
final
bitmask =
0x0f
;
assert
((value & bitmask) ==
0x02
);
// AND
assert
((value & ~bitmask) ==
0x20
);
// AND NOT
assert
((value | bitmask) ==
0x2f
);
// OR
assert
((value ^ bitmask) ==
0x2d
);
// XOR
assert
((value <<
4
) ==
0x220
);
// Shift left
assert
((value >>
4
) ==
0x02
);
// Shift right
condition
? expr1 : expr2
condition
が
true
なら
expr1
を計算する(そしてその値を返す);そうでなければ、
expr2
を計算して返す。
expr1
?? expr2
もし
expr1
が非
null
のときはその値を返す;
そうでなければ、
expr2
を計算して返す。
ブール式に基づいて値を代入したいときは
?
:
の使用を検討されたい。
// ?:
演算子を使った少し長い記述
String playerName(String name) => name != null ? name : 'Guest';
// if-else文を使った非常に長い記述
String playerName(String name) {
if (name != null) {
return name;
} else {
return 'Guest';
notation)
カスケード
(..)はSmallTalkで最初に導入されたもので、同じオブジェクト上で操作のシーケンスを行得るようになる。関数呼び出しに加えて、同じオブジェクト上のフィールドにもアクセスできる。これにより一時変数生成のステップが節約され、より簡潔なコードが書ける。
以下のコードを考えてみよう:
querySelector(
'#confirm'
)
// object
取得
..text = 'Confirm' // そのメンバを使用
..classes.add('important')
..onClick.listen((e) => window.alert('Confirmed!'));
最初のメソッド呼び出しquerySelector()はselectorオブジェクトを返す。これに続くカスケード表記はこのselectorオブジェクト上で動作し、それが返されるかもしれないどの後の値も無視する。
前のサンプルは以下と等価である:
var
button = querySelector(
'#confirm'
);
button.text = 'Confirm';
button.classes.add('important');
button.onClick.listen((e) => window.alert('Confirmed!'));
List keys = mimeMap.keys.toList()..sort();
for (String key in keys) {
print('extension: $key, mime type:${mimeMap[key]}');
extension: 3g2, mime type:video/3gpp2
extension: abs, mime type:audio/x-mpeg
extension: exe, mime type:application/octet-stream
extension: rtf, mime type:application/rtf