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的值 |
如下所示:
应用场景二
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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); }