美文网首页
Dart基础语法<三> 操作符

Dart基础语法<三> 操作符

作者: 果汁味Studio | 来源:发表于2020-12-26 14:14 被阅读0次

    本节主要记录和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

    相关文章

      网友评论

          本文标题:Dart基础语法<三> 操作符

          本文链接:https://www.haomeiwen.com/subject/sgvlnhtx.html