运算符(上)

算术运算符

Dart 支持常用的运算运算符,如下表所示:

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); // 结果是双浮点型
assert(5 ~/ 2 == 2); // 结果是整型
assert(5 % 2 == 1); // 余数

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

Dart 还支持前缀和后缀,自增和自减运算符。

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


关系运算符

下表列出了关系运算符及含义:

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

要测试两个对象x和y是否表示相同的事物, 使用 == 运算符。 (在极少数情况下, 要确定两个对象是否完全相同,需要使用 identical() 函数。) 下面给出 == 运算符的工作原理:

  1. 如果 x 或 y 可以 null,都为 null 时返回 true ,其中一个为 null 时返回 false。
  2. 结果为函数 x.==(y) 的返回值。 (如上所见, == 运算符执行的是第一个运算符的函数。 我们甚至可以重写很多运算符,包括 ==, 运算符的重写,参考 重写运算符。)

这里列出了每种关系运算符的示例:

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

类型判定运算符

as, is, 和 is! 运算符用于在运行时处理类型检查:

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

例如, obj is Object 总是 true。 但是只有 obj 实现了 T 的接口时, obj is T 才是 true。

使用 as 运算符将对象强制转换为特定类型。 通常,可以认为是 is 类型判定后,被判定对象调用函数的一种缩写形式。 请考虑以下代码:

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

使用 as 运算符进行缩写:

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

提示: 以上代码并不是等价的。 如果 emp 为 null 或者不是 Person 对象, 那么第一个 is 的示例,后面将不回执行; 第二个 as 的示例会抛出异常。

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号

意见反馈
返回顶部