目录
1.有条件成员访问运算符 ?. (Conditional member access)
2. 空检查运算符 ??
3. ??=
4. 箭头运算符 =>
5. 级联运算符.. (Cascade notation)
6. 整除算术运算符~/
7. 展开运算符 … (Spread operator)源泉来源于javascript
在对一个对象进行点运算操作时,这个对象可能还未初始化,就会报空指针错误。
?.
有条件的成员访问运算符应运而生,这个运算符的作用可以简单粗略的说成是如果一个对象不为空,那么获取他的内部变量,否则返回 null
。
回到上面的第一个例子,我们用?.
运算符修改一下:
例子 var C = A?.B
如果 A 等于 null,那么 A?.B 为 null
如果 A 不等于 null,那么 A?.B 等价于 A.B
//代码运行环境是 flutter版本2.2.3 dart 2.13.4
void main() {
Animal animal = new Animal('cat');
//此处如果给一个变量赋值为null。需要使用?进行修饰
Animal? empty = null;
//animal 非空,返回 animal.name 的值 cat
print(animal.name);
//empty 为空,返回 null
print(empty?.name);
//animal 非空,可以直接访问 animal.name 的值 cat
print(animal.name);
//empty 为空,抛出异常
print(empty?.name);
}
class Animal {
final String name;
Animal(this.name);
}
检查变量A的值是否为空,如果为空则给C赋值
例子 var C = A??B
如果 A 等于 null,那么 C = B
如果 A 不等于 null,那么 C = A
Point point;
//point类没有初始化
//如果point没有初始化,x默认为0
int x = point?.x ?? 0;
pages[0]?.contributors[0]?.authorDetails?.basicInfo?.firstName ?? "N/A";
如果左侧为空,则执行赋值
Point point;
point ??= Point(x:1, y:2); //这个赋值会执行
point ??= Point(x:3, y:4); //这个赋值不会执行
它有两种应用场景。一是 相当于 {return x;}
的作用,二是作用于单条语句
// 1. 相当于 `{return x;}` 的作用
String demoFunction(String str){
return str.toLowerCase();
}
String demoFunction(String str) => str.toLowerCase();
// 2. 作用于单条语句
void demoFunction(String str) => print(str);
更改对象属性(通常是在创建对象时)的一种简单方法,而不是获得对该对象的引用并逐个更改属性, 类似于java中的builder模式
Point point = Point()
..x = 3
..y = 6;
除以并返回结果的底数(整数部分)
int a = 2;
int b = 5;
//返回整数结果
int c = b ~/a;
//返回浮点结果
var d = b / a;
print(c); // 2
print(d); // 2.5
作为集合的展开运算符,使用此运算符可以轻松展开数组
var demoList = [1,2,3,4,5];
var otherList = [
6,
7,
8,
...demoList,
]