本章介绍Dart语言的运算符以及表达式,在运算符和表达式上Dart语言跟其他编程语言类似,主要包括下面几类:
- 算数运算符
- 关系运算符
- 类型测试运算符
- 赋值运算符
- 逻辑运算符
- 位运算符
- 条件运算符
- Cascade (级联调用)
这几类运算符,熟悉其他编程语言的人来说都比较熟悉了,唯一区别就是Cascade (级联调用)表达式,这种语法其他语言不一定有,下面一一介绍各种运算符的用法。
说明:编程语言的表达式,通常就是由运算符和变量,函数等元素组成的语法句子。
1. Cascade (级联调用)
我们先介绍跟其他语言有区别的级联调用的语法,级联调用主要用在对同一个对象连续调用的场景。
级联调用主要通过 .. (两个连续的点) 连续调用对象成员。
例子:
querySelector('#confirm') // 通过querySelector查询获得一个对象
..text = 'Confirm' // 设置对象text熟属性
..classes.add('important'); // 调用对象的classes属性的add函数
等价代码
// 通过querySelector查询获得一个对象
var button = querySelector('#confirm');
// 设置对象text熟属性
button.text = 'Confirm';
// 调用对象的classes属性的add函数
button.classes.add('important');
提示: 大家可以先忽略querySelector函数,以及返回对象的是干什么的,先关注语法。
2.赋值运算符
赋值运算符通常用于将表达式结果赋值给一个变量。
例子:
a = 100;
复合赋值运算符。
语法:a op= b 等价于 a = a op b
说明:op是各种运算符。
例子:
a *= 3; // 等价于 a = a * 3
a -= 3; // 等价于 a = a - 3
a += 3; // 等价于 a = a + 3
a /= 3; // 等价于 a = a / 3
a %= 3; // 等价于 a = a % 3
3.算数运算符
运算符 | 说明 |
---|---|
+ | 加 |
- | 减 |
-expr | 算数取反 |
* | 乘 |
/ | 除 |
~/ | 除法,结果取整 |
% | 求余 |
++ | 支持前置自增和后置自增 |
-- | 支持前置自减和后置自减 |
例子:
// a = 5
var a = 2 + 3;
// a1 = -1
var a1 = 2 - 3;
// a2 = 6
var a2 = 2 * 3;
// a3 = 2.5
var a3 = 5 / 2;
// 整除,a4 = 2
var a4 = 5 ~/ 2;
// 求余数 a5 = 1
var a5 = 5 % 2;
a++; // 相当于 a = a + 1
++a;
a--; // 相当于 a = a - 1
--a;
说明:a++和++a这两种表达式区别是a++是先返回a的值,然后在加1, ++a则是先加1在返回a+1的值 ,如果单独写 a++和++a 结果没区别,如果用在复合表达式中或者赋值表达式中就有区别了。
4.关系运算符
运算符 | 说明 |
---|---|
== | 判断两个值是否相等 |
!= | 判断两个值是否不相等 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
关系运运算符常用于条件表达式中,判断条件是否成立。
例子:
if (a >= 1)) {
// 代码
}
5.类型测试运算符
类型测试运算符主要用于检测一个变量跟一个对象类型的关系。
运算符 | 说明 |
---|---|
as | 用于类型转换,将一个对象类型转换成另外一种对象类型,一般用于子类对象转换成父类对象。 |
is | 用于检测一个变量是否属于某种对象类型 |
is! | 用于检测一个变量不属于某种对象类型 |
例子:
// 如果 emp变量是Person类型则条件为true
if (emp is Person) {
// 忽略代码
}
// 永远返回true, 因为所有类型都继承了Object。
if (emp is Object) {
// 忽略代码
}
说明:如果变量是某个类的子类的实例,那么这个变量也属于父类类型,is条件返回true。
6.逻辑运算符
运算符 | 说明 |
---|---|
!expr | 表达式条件取反 |
|| | 逻辑或 |
&& | 逻辑与 |
常用于条件语句组合表达式,例子:
if (!done && (col == 0 || col == 3)) {
// ..忽略代码..
}
7.位运算符
二进制位运算符
运算符 | 说明 |
---|---|
& | 与 |
| | 或 |
^ | 异或 |
~expr | 按位取反 |
<< | 左移 |
>> | 右移 |
例子:
// a = 256
var a = 1 << 8;
8.条件运算符
在dart语言中有两种条件运算符。
语法1:
condition ? expr1 : expr2
condition 表达式为真,则执行并返回expr1的值, 否则执行expr2
语法2:
expr1 ?? expr2
如果expr1不等于null, 则执行expr1并返回expr1的值,否则执行并返回expr2的值。
例子:
// 如果isPublic为真,visibility = 'public' 否则 visibility = 'private'
var visibility = isPublic ? 'public' : 'private';
// 这种语法在处理参数默认值非常有用。
// 如果name不等于null, 则payerName = name 否则payerName = 'Guest'
String payerName = name ?? 'Guest';