算术运算符
运算符 | 说明 |
---|---|
+ | 加法 |
- | 减法 |
-expr | 一元减号,也称为否定(与表达式的符号相反) |
* | 乘法 |
/ | 除法 |
~/ | 取模运算 |
% | 取余运算 |
自增自减运算符
运算符 | 说明 |
---|---|
++var | var = var + 1 (表达式的值是 var + 1) |
var++ | var = var + 1 (表达式的值是 var) |
--var | var = var – 1 (表达式的值是 var – 1) |
var-- | var = var – 1 (表达式的值是 var) |
关系运算符
运算符 | 说明 |
---|---|
== | 相等 |
!= | 不等 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
类型测试操作符
运算符 | 说明 |
---|---|
as | 形态转换 |
is | 如果对象具有指定的类型,则为 True |
is! | 如果对象具有指定的类型,则为 False |
if (emp is Person) {
// Type check
emp.firstName = 'Bob';
}
(emp as Person).firstName = 'Bob';
赋值操作符
-=
、/=
、%=
、>>=
、^=
、+=
、*=
、~/=
、<<=
、&=
、|=
仅为空变量赋值使用 ??=
操作符。
var b;
var a = 5;
var value = 2;
// 仅在 b 为空的情况下 b 被赋值 value 否则 b 的值不变
b ??= value;
print(b); // 2
a ??= value;
print(a); // 5
逻辑运算符
-
!expr
取反 -
||
逻辑或 -
&&
逻辑与
位和移位运算
-
&
按位与 -
|
按位或 -
^
按位异或 -
~expr
按位取反 -
<<
左移 -
>>
右移
条件表达式
condition ? expr1 : expr2
如果条件为真,则计算并返回 expr1 的值,否则计算并返回 expr2 的值。
expr1 ?? expr2
如果 expr1 非空,则返回其值,否则,计算并返回 expr2 的值。
级联表示法
级联 ..
允许在同一个对象上创建一个操作序列。除了函数调用之外,还可以访问同一对象上的字段。这通常可以省去创建临时变量的步骤。
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();
在返回实际对象的函数上构造级联要小心。例如,以下代码会出错:
var sb = StringBuffer();
sb.write('foo')
..write('bar'); // Error: method 'write' isn't defined for 'void'.
sb.write()
返回结果为 void,所以不能在一个 void 结果上继续构建级联操作。
严格地说,级联的
..
表示法不是运算符。这只是 Dart 语法的一部分。
网友评论