4.Operators-操作符(Dart中文文件)
阿新 • • 發佈:2018-12-21
Dart有如下操作符:
Description | Operator |
---|---|
unary postfix | expr++ expr-- () [] . ?. |
unary prefix | -expr !expr ~expr ++expr --expr |
multiplicative | * / % ~/ |
additive | + - |
shift | << >> |
bitwise AND | & |
bitwise XOR | ^ |
bitwise OR | | |
relational and type test | >= > <= < as is is! |
equality | == != |
logical AND | && |
logical OR | || |
if null | ?? |
conditional | expr1 ? expr2 : expr3 |
cascade | .. |
assignment | = *= /= ~/= %= += -= <<= >>= &= ^= |= ??= |
在操作符表中,優先順序是從上到下遞減。例如,即便&&在==之前,優先順序是求餘(%)>判斷相等(==)> 且(&&)。下面程式碼中,計算順序是一致的
// Parentheses improve readability. if ((n % i == 0) && (d % i == 0)) ... // Harder to read, but equivalent. if (n % i == 0 && d % i == 0) ...
注意:操作符左右各有一個物件,操作符具體行為是由左邊的物件決定的,這個涉及到操作符過載,比如Vector和Point物件過載了+號操作符的行為,Vector+Point的+號具體行為由Vector決定。
Arithmetic operators 算術運算子
Dart supports the usual arithmetic operators, as shown in the following table.
Dart支援常見的幾種算術運算子
Operator | Meaning |
---|---|
+ | Add |
– | Subtract |
-expr | Unary minus, also known as negation (reverse the sign of the expression) |
* | Multiply |
/ | Divide |
~/ | Divide, returning an integer result |
% | Get the remainder of an integer division (modulo) |
assert(2 + 3 == 5);
assert(2 - 3 == -1);
assert(2 * 3 == 6);
assert(5 / 2 == 2.5); // Result is a double
assert(5 ~/ 2 == 2); // Result is an int
assert(5 % 2 == 1); // Remainder
assert('5/2 = ${5 ~/ 2} r ${5 % 2}' == '5/2 = 2 r 1');
Dart也支援自增自減運算子
Operator | Meaning |
---|---|
++var | var = var + 1 (expression value is var + 1) |
var++ | var = var + 1 (expression value is var) |
--var | var = var – 1 (expression value is var – 1) |
var-- | var = var – 1 (expression value is var) |
var a, b;
a = 0;
b = ++a; // Increment a before b gets its value.
assert(a == b); // 1 == 1
Equality and relational operators 關係運算符
Operator | Meaning |
---|---|
== | Equal; see discussion below |
!= | Not equal |
> | Greater than |
< | Less than |
>= | Greater than or equal to |
<= | Less than or equal to |
驗證兩個物件是否相同,用==操作符,(在極少數情況下,你要判斷兩個物件是否完全相同,需要用identical()函式)
下面是==的判斷邏輯:
步驟1.如果x,y都是null,返回true ,x,y只有一個是null,返回false
步驟2.返回x.==(y)的結果,這種寫法類似a.method(params),可以將==看做x的方法。
assert(2 == 2);
assert(2 != 3);
assert(3 > 2);
assert(2 < 3);
assert(3 >= 3);
assert(2 <= 3);
a = 0;
b = a++; // Increment a AFTER b gets its value.
assert(a != b); // 1 != 0
a = 0;
b = --a; // Decrement a before b gets its value.
assert(a == b); // -1 == -1
a = 0;
b = a--; // Decrement a AFTER b gets its value.
assert(a != b); // -1 != 0
```
本章節未完