運(yùn)算符(上)

2020-02-03 18:54 更新

算術(shù)運(yùn)算符

Dart 支持常用的運(yùn)算運(yùn)算符,如下表所示:

OperatorMeaning
+Add
Subtract
-exprUnary 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); // 結(jié)果是雙浮點(diǎn)型
assert(5 ~/ 2 == 2); // 結(jié)果是整型
assert(5 % 2 == 1); // 余數(shù)

assert('5/2 = ${5 ~/ 2} r ${5 % 2}' == '5/2 = 2 r 1');

Dart 還支持前綴和后綴,自增和自減運(yùn)算符。

OperatorMeaning
++varvar = var + 1 (expression value is var + 1)
var++var = var + 1 (expression value is var)
--varvar = var – 1 (expression value is var – 1)
var--var = var – 1 (expression value is var)

示例:

var a, b;

a = 0;
b = ++a; // a自加后賦值給b。
assert(a == b); // 1 == 1

a = 0;
b = a++; // a先賦值給b后,a自加。
assert(a != b); // 1 != 0

a = 0;
b = --a; // a自減后賦值給b。
assert(a == b); // -1 == -1

a = 0;
b = a--; // a先賦值給b后,a自減。
assert(a != b); // -1 != 0


關(guān)系運(yùn)算符

下表列出了關(guān)系運(yùn)算符及含義:

OperatorMeaning
==Equal; see discussion below
!=Not equal
>Greater than
<Less than
>=Greater than or equal to
<=Less than or equal to

要測試兩個對象x和y是否表示相同的事物, 使用 == 運(yùn)算符。 (在極少數(shù)情況下, 要確定兩個對象是否完全相同,需要使用 identical() 函數(shù)。) 下面給出 == 運(yùn)算符的工作原理:

  1. 如果 x 或 y 可以 null,都為 null 時返回 true ,其中一個為 null 時返回 false。
  2. 結(jié)果為函數(shù) x.==(y) 的返回值。 (如上所見, == 運(yùn)算符執(zhí)行的是第一個運(yùn)算符的函數(shù)。 我們甚至可以重寫很多運(yùn)算符,包括 ==, 運(yùn)算符的重寫,參考 重寫運(yùn)算符。)

這里列出了每種關(guān)系運(yùn)算符的示例:

assert(2 == 2);
assert(2 != 3);
assert(3 > 2);
assert(2 < 3);
assert(3 >= 3);
assert(2 <= 3);

類型判定運(yùn)算符

as, is, 和 is! 運(yùn)算符用于在運(yùn)行時處理類型檢查:

OperatorMeaning
asTypecast (也被用于指定庫前綴)
isTrue if the object has the specified type
is!False if the object has the specified type

例如, obj is Object 總是 true。 但是只有 obj 實(shí)現(xiàn)了 T 的接口時, obj is T 才是 true。

使用 as 運(yùn)算符將對象強(qiáng)制轉(zhuǎn)換為特定類型。 通常,可以認(rèn)為是 is 類型判定后,被判定對象調(diào)用函數(shù)的一種縮寫形式。 請考慮以下代碼:

if (emp is Person) {
  // Type check
  emp.firstName = 'Bob';
}

使用 as 運(yùn)算符進(jìn)行縮寫:

(emp as Person).firstName = 'Bob';

提示: 以上代碼并不是等價的。 如果 emp 為 null 或者不是 Person 對象, 那么第一個 is 的示例,后面將不回執(zhí)行; 第二個 as 的示例會拋出異常。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號