运算符
Dart语言中的运算符与Java中的绝大多数相同。
算术运算符
+、-、*、/、%同Java语言
Dart中又多出了一个整除运算符~/,与普通除号的区别是将相除后的结果取整返回。
类型判定运算符
以下是Dart增加的类型相关的运算符。
| 操作符 | 解释 |
|---|---|
as |
用于类型转换 |
is |
如果对象是指定的类型就返回 True |
is! |
如果对象不是指定的类型返回 True |
当 obj 实现了 T 的接口时, obj is T 才是 true。类似于Java中的instanceof。
Dart中使用 as 操作符把对象转换为特定的类型,如无法转换则会抛出异常,因此在转换前最好使用is运算符进行检测。
// 将p转换为Person类型再操作
(p as Person).name = 'Bruce';
条件表达式
Dart中也支持三目表达式
condition ? expr1 : expr2
除此外,Dart还增加了非空条件判断符??
expr1 ?? expr2
上述运算表示,如果expr1的值不等于null,则返回其值; 否则执行表达式expr2并返回其结果。
var str1 = "Hello";
var str2 = "world";
var result = str1 ?? str2.toUpperCase();
级联运算符
我们通常使用
.操作符调用对象的方法,这在Dart中也是支持的,但是Dart另外增加了一种级联运算符..,用两个点表示。
级联运算符可以在同一个对象上连续调用多个方法以及访问成员变量。 使用它可以避免创建临时变量, 写出更流畅的代码。
假如类Person有三个方法,setName、setAge、save,则可如下调用
new Person()..setName("Bob")..setAge(20)..save();
使用级联运算符调用方法,无需该方法返回对象本身即可连续的流式的调用该对象的其他方法。
条件成员访问符
在Java中很容易碰到恼人的空指针错误,因此在方法调用前需要进行对象的非空判断,这样的判断语句使代码变得冗长,可读性差,不整洁。Dart中则发明了一个新的运算符用于处理此类情况。
条件成员访问符?.,它和.类似,但是运算符左边的对象不能为null,否则返回null,若对象不为null,则返回对象本身。
// list1默认值为null
List list1;
print(list1?.length); // null
List list2 = [];
print(list2?.length); // 0
公众号“编程之路从0到1”