且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Dart基础-运算符

更新时间:2022-09-16 21:22:13

运算符

dart定义的运算符如下所示

描述 运算符
一元后缀 expr++expr–()[].
一元前缀 -expr!expr~expr++expr–expr
乘法 */%~/
加法 +-
移位 <<>>
按位与 &
按位或 |
关系和类型判断 >=><=<asisis!
相等 ==!=
逻辑与 &&
逻辑或 ||
条件式 expr1 ? expr2 : expr3
级联 ..
赋值 ==/=~/=%=+=-=<<=>>=&=^= 、 |=

下面是使用运算符创建表达式的例子

a++
a + b
a = b
a == b
a ? b : c
a is T

在上面的所有运算符中,前排的优先级高于后排的,例如”%“ > ”==“ > ”&&“

//括号能改变优先级
if ((n % i == 0) && (d % i == 0))
//效果跟上面一样
if (n % i == 0 && d % i == 0)

算术运算符

dart常用的算术运算符如下

运算符 意义
+ 加法
- 减法
-expr 取反,或称否定(反向表达式)
* 乘法
/ 除法
~/ 整除
% 模运算,取整除后的余

写个例子

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);

print('5除2等于${5~/2}余${5%2}');

dart还可以用两个前缀和后缀进行自增和自减运算

运算符 意义
++var var = var + 1(执行前加1)
var++ var = var + 1(执行后加1)
–var var = var - 1(执行前减1)
var– var = var - 1(执行后减1)

写个例子

var a, b;

a = 0;
b = ++a;
assert(a == b);

a = 0;
b = a++;
assert(a != b);

a = 0;
b = --a;
assert(a == b);

a = 0;
b = a--;
assert(a != b);

相等与关系运算符

dart常用的相等与关系运算符如下

运算符 意义
== 等于
!= 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于

判断两个对象是否相等,使用 = 运算符,少数情况下,你想知道两个对象是否完全相等,可以使用 identical() 方法

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

类型运算符

用as、is和is!可以很方便的在执行时检查
用 obj is T 这个语法可以判断obj是否实现了T

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

你也可以使用as运算符检查

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

还有is!运算符,它与is反着来

赋值运算符

赋值用 = 运算符,如果在前面加上其他运算符比如 += ,就可以组成复合赋值运算符

=    –=    /=    %=    >>=    ^=
+=    *=    ~/=    <<=    &=    |=

复合赋值运算符的语法说明是 a op= b 等于 a = a op b

var a = 2;
a *= 3;
assert(a == 6);

逻辑运算符

dart常用的逻辑运算符如下

运算符 意义
!expr 反转表达式,假为真,反之亦然
|| 逻辑或
&& 逻辑与

写个例子

if (!done && (col == 0 || col == 3)) {
  // ...
}

按位和位移运算符

你可以使用按位和位移运算符操纵一个数字

运算符 意义
&
|
^ 异或
~expr 按位补码(0成为1;1变成0)
<< 左移位
>> 右移位

写个例子

final value = 0x22;
final bitmask = 0x0f;

assert((value & bitmask) == 0x02);
assert((value & ~bitmask) == 0x20);
assert((value | bitmask) == 0x2f);
assert((value ^ bitmask) == 0x2d);
assert((value << 4) == 0x220);
assert((value >> 4) == 0x02);

其它运算符

剩下的部分运算符

运算符 名称 意义
() 函数应用 表示一个函数调用
[] 访问列表 在列表中索引指定值
expr1 ? expr2 : expr3 条件式 如果expr1为真,执行expr2,否则执行expr3
. 成员访问 选择对象的成员,例如foo.bar
.. 级联 对对象的成员执行多个操作