Dart 语法总结2:有趣便捷的语法糖

目录

1.有条件成员访问运算符 ?.  (Conditional member access)

2. 空检查运算符 ??

3. ??=

4. 箭头运算符 =>

5.  级联运算符..   (Cascade notation)

6.  整除算术运算符~/

7.  展开运算符 …    (Spread operator)源泉来源于javascript


1.有条件成员访问运算符 ?.  (Conditional member access)

在对一个对象进行点运算操作时,这个对象可能还未初始化,就会报空指针错误。

?.有条件的成员访问运算符应运而生,这个运算符的作用可以简单粗略的说成是如果一个对象不为空,那么获取他的内部变量,否则返回 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);
}

2. 空检查运算符 ??

检查变量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";

3. ??=

如果左侧为空,则执行赋值

Point point;
point ??= Point(x:1, y:2); //这个赋值会执行
point ??= Point(x:3, y:4); //这个赋值不会执行

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

5.  级联运算符..   (Cascade notation)

更改对象属性(通常是在创建对象时)的一种简单方法,而不是获得对该对象的引用并逐个更改属性, 类似于java中的builder模式

 Point point = Point()
            ..x = 3
            ..y = 6;

6.  整除算术运算符~/

除以并返回结果的底数(整数部分)

int a = 2;
int b = 5;
//返回整数结果
int c = b ~/a;
//返回浮点结果
var d = b / a;
print(c); // 2
print(d); // 2.5

7.  展开运算符 …    (Spread operator)源泉来源于javascript

作为集合的展开运算符,使用此运算符可以轻松展开数组

  var demoList = [1,2,3,4,5];
  var otherList = [
          6,
          7,
          8,
          ...demoList,
          ]

你可能感兴趣的:(dart语法入门,dart,移动开发,flutter)