Dart学习之一些奇怪的运算符

1.  条件属性访问运算符( ?. )

nullableObject?.action();
nullableObject == null ? null: nullableObject.action();

2. 空合并运算符( ?? )

// Both of the following print out 'alternate' if nullableString is null
print(nullableString ?? 'alternate');
print(nullableString != null ? nullableString : 'alternate');

3. 空合并赋值运算符( ??= )

// Both of the following set nullableString to 'alternate' if it is null
nullableString ??= 'alternate';
nullableString = nullableString != null ? nullableString : 'alternate';

4. 扩展运算符( ... ) 与空感知扩展运算符( ...? )

//你可以使用扩展操作符(...)将一个 List 中的所有元素插入到另一个 List 中:
var list = [1, 2, 3];
var list2 = [0, ...list];
assert(list2.length == 4);

//如果扩展操作符右边可能为 null ,你可以使用 null-aware 扩展操作符(...?)来避免产生异常:
var list2 = [0, ...?list];
assert(list2.length == 1);

5. 级联运算符( .. , ?.. )

级联运算符 (..?..) 可以让你在同一个对象上连续调用多个对象的变量或方法。

var paint = Paint();
paint.color = Colors.black;
paint.strokeCap = StrokeCap.round;
paint.strokeWidth = 5.0;

var paint = Paint()
  ..color = Colors.black
  ..strokeCap = StrokeCap.round
  ..strokeWidth = 5.0;
-------------------------
var button = querySelector('#confirm');
button?.text = 'Confirm';
button?.classes.add('important');
button?.onClick.listen((e) => window.alert('Confirmed!'));
button?.scrollIntoView();
//使用 空判断 级联操作符 (?..)可以确保级联操作均在实例不为 null 时执行。
//使用空判断级联后,也不再需要 button 变量了:
querySelector('#confirm')
  ?..text = 'Confirm'
  ..classes.add('important')
  ..onClick.listen((e) => window.alert('Confirmed!'))
  ..scrollIntoView();

as、is、is!

Dart学习之一些奇怪的运算符_第1张图片

(employee as Person).firstName = 'Bob';

if (employee is Person) {
  // Type check
  employee.firstName = 'Bob';
}
//上述两种方式是有区别的:如果 employee 为 null 或者不为 Person 类型,则第一种方式将会抛出异常,而第二种不会。

---------

你可能感兴趣的:(Dart,学习)