Dart 語法糖 ???


1. dart 在線編輯器

一般一些簡單的 dart 測試我們可以直接用在線編輯器來做測試和驗證。

下面給大家介紹的兩個都是官網的。

dart 在線運行器主頁版:👇
https://www.dartlang.org/guides/get-started

dart 在線運行器全屏版:👇
https://dartpad.dartlang.org/null

2. dart ?.

左邊如果為空返回 null,否則返回右邊的值。

A?.B
如果 A 等於 null,那么 A?.B 為 null
如果 A 不等於 null,那么 A?.B 等價於 A.B

 

 

 

void main() {
  Animal animal = new Animal('cat');
  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);
}

3. dart ??

左邊如果為空返回右邊的值,否則不處理。

 

A??B
如果 A 等於 null,那么 A??B 為 B
如果 A 不等於 null,那么 A??B 為 A

 

 

 

 

4. dart ?. ?? 

A?.b??'為空'

A為空返回b 如果b為空返回字符----為空

A.xxx??b

A.xxx為空則返回b的值 

 

 

 

 

 

如下所示:

 

 

 

應用場景二 

 

void main() {
  C c = new C('Case 1');
  B b = new B(c);
  A a = new A(b);
  
//   C c = new C(null);
//   B b = new B(c);
//   A a = new A(b);
  
//   C c = new C('Case 2');
//   B b = null;
//   A a = new A(b);
  
  //直接使用.來最終獲取 c 的變量 value
  if (a != null && a.bMember != null && a.bMember.cMember != null) {
    print(a.bMember.cMember.value);
  } else {
    print(null);
  }
  
  //直接使用.來最終獲取 c 的變量 value,為空時返回 unknown
  if (a != null && a.bMember != null && a.bMember.cMember != null) {
    String value = a.bMember.cMember.value;
    if (value == null) {
      value = 'unknown';
    }
    print(value);
  } else {
    print('unknown');
  }
  
  //dart 使用?.來最終獲取 c 的變量 value
  print(a?.bMember?.cMember?.value);
  //dart 使用?.來最終獲取 c 的變量 value,為空時使用 ?? 返回 unknown
  print(a?.bMember?.cMember?.value??'unknown');
}

class A {
  final B bMember;
  A(this.bMember);
}

class B {
  final C cMember;
  B(this.cMember);
}

class C {
  final String value;
  C(this.value);
}
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM