Dart基础语法<三> 操作符

本节主要记录和Java用法有明显差异的操作符。包括

  • 类型判定操作符
  • 赋值操作符
  • 条件表达式
  • 级联操作符
  • 安全操作符
类型判定操作符
  1. asisis! 操作符是在运行时判定对象类型的操作符
  2. as 用于类型转换,把对象转换为特定的类型,如果无法完成转换会抛出一个异常
  3. is 如果对象是指定的类型返回 true ,类似Java中的 instanceOf()
  4. is! 如果对象是指定的类型返回false
void main() {
  //操作符 类型转换
  var i = 10;
  //不同于Java的(int)强转
  int j = i as int;
  //不同于java的instanceOf()
  if (i is int) {
    print(i);
  }
  //如果i不是整型
  if (i is! int) {
    print(i);
  }
}
赋值操作符

1.=+=\=*=等赋值操作符与Java使用一致
2.??= 操作符用来指定值为 null 的变量值

void main() {
 var s1, s2;
//保证s1不为null
 if (null == s1) {
    s1 = "Juice";
  }
//s2为null时,赋值Juice,不为null时不执行操作
  s2 ??= "Juice";
  print(s1);
  print(s2);
}

以上两种输出结果都是Juice,??=更简便一些

条件表达式
  1. condition ? expr1 : expr2 三目表达式用法和Java一致
  2. expr1 ?? expr2 表示 expr1 不为null,返回其值,否则执行 expr2 并返回其结果。
void main() {
  var k;
  var result = k ?? "Juice";
  print(result);
}

输出结果为Juice

级联操作符

级联操作符 (..) 可以在同一个对象上连续调用多个函数以及访问成员变量。

void test() {
  Builder builder = new Builder();
  builder
    ..A()
    ..B()
    ..C();
}

class Builder {
  void A() {
    print("这是方法A");
  }

  String B() {
    var k = "这是方法B";
    print(k);
    return k;
  }

  void C() {
    print("这是方法C");
  }
}

输出结果.png

按照Java写法,A() B() C()三个方法返回值需要改为Builder对象,才能实现链式调用,但在Dart中可以通过级联操作符 .. 直接实现(但是B()方法返回值会被忽略)。

安全操作符

?.操作符,如果操作对象为null,则返回 null

void test1() {
  String a;
  //空指针异常
  //print(a;.length);
  //如果a为null,则返回null
  print(a?.length);
}

输出结果为null

猜你喜欢

转载自blog.csdn.net/qq_22255311/article/details/111773890