說明 | 運算子 | 範例 |
---|---|---|
一元後置 | expr++,expr--,(),[],.,?. | i++, i--, const[1,0],Test.fun(),Test?.fun |
一元前置 | -expr,!expr,~expr,++expr,--expr | 3-1, !flag, ~flag, ++i, --i |
乘,除,餘數,商數 | *, /, %, ~/ | 2*3, 6/3, 6%3, 6~/6 |
加,減 | +,- | 2+3, 3-2 |
移位(shift) | <<,>>,>>> | 7<<2(111變成11100,28), 7>>2(111變成001,1) |
二進制 AND | & | 7&2 |
二進制 XOR | ^ | 7^2 |
二進制 OR | ` | ` |
關係,類型測試 | >=,>,<=,<,as,is,is! | 7>=2, 2<=7 |
相等判斷 | ==,!= | x==2, x!=2 |
邏輯 AND | && | x=0 && y=0 |
邏輯 OR | ` | |
Null 判斷 | ?? | var x = y ?? 0 (若y是null則x=0,y非null則x=y) |
b ??= value;(僅當 b 為 null 時才賦值) | ||
條件expr | expr1 ? expr2 : expr3 | x==2?y=3:y=4; |
級聯cascade | .. | Object..fun1()..fun2() |
賦值 | = *= /= += -= &= ^= …… | x=7, x*=7,... |
##級聯(cascade):可以讓你在同一個物件上連續呼叫多個物件的屬性或方法。舉例如下:
querySelector('#confirm') // 取得物件 (Get an object).
..text = 'Confirm' // 使用物件的成员 (Use its members).
..classes.add('important') //使用物件的方法
..onClick.listen((e) => window.alert('Confirmed!'));
以上的例子如同:
var button = querySelector('#confirm');
button.text = 'Confirm';
button.classes.add('important');
button.onClick.listen((e) => window.alert('Confirmed!'));
也可以巢狀套用你的級聯,舉例如下
final addressBook = (AddressBookBuilder()
..name = 'jenny'
..email = 'jenny@example.com'
..phone = (PhoneNumberBuilder()
..number = '415-555-0100'
..label = 'home')
.build())
.build();
二進制位元的運算如下面的範例說明
void main() {
var a = 2; // Bit 表示為 10
var b = 3; // Bit 表示為 11
var result;
result = (a & b);
print("(a & b) => $result");
result = (a | b);
print("(a | b) => $result");
result = (a ^ b);
print("(a ^ b) => $result");
result = (~b);
print("(~b) => $result");
result = (a < b);
print("(a < b) => $result");
result = (a > b);
print("(a > b) => $result");
}