1. 程式人生 > 其它 >Dart基礎語法<三> 操作符

Dart基礎語法<三> 操作符

技術標籤:Flutter學習筆記--Dart基礎語法篇dartflutter

本節主要記錄和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