Android技术知识Android开发经验谈Android开发

flutter【4】dart语言--操作符

2019-01-25  本文已影响0人  昵称真难选

操作符

详细的各个操作符的作用不再赘述,参考官网-操作符一览表

操作符可以进行覆写,参考Overridable operators

操作结果类型

操作符左右两边的操作对象不一致时,操作结果以左侧操作对象类型为准。

下面介绍一些 dart中比较特殊的操作符。

相等操作符

== 操作符判断两个对象表示的东西是否一样,如果两个对象都是 null 返回true,如果有一个是 null ,返回 false。== 操作符其实就是返回 x.==(y) 的值,可以被覆写。

如果需要严格的对比两个对象,则使用 identical() 方法。

类型检查操作符

as 操作符可以将对象类型判断和使用两个行为进行合并,如下:

//is 方式
if (emp is Person) {
  // Type check
  emp.firstName = 'Bob';
}

//as 方式,注意当 emp 为 null 或者不是 Person类型时,会抛出异常
(emp as Person).firstName = 'Bob';

赋值操作符

一般结构为 po= ,如 ??= 表示当左边变量为 null 时,将右边的值赋给左边变量。

// Assign value to b if b is null; otherwise, b stays the same
b ??= value;

条件操作符

var visibility = isPublic ? 'public' : 'private';

String playerName(String name) => name ?? 'Guest';

级联操作符(..)

使用 .. 操作符可以对同一对象执行一系列操作,能够节省中间步骤和临时变量,让代码更高效。

其实严格来说, .. 级联语法不是一个操作符。 只是一个 Dart 特殊语法。

querySelector('#confirm') // Get an object.
  ..text = 'Confirm' // Use its members.
  ..classes.add('important')
  ..onClick.listen((e) => window.alert('Confirmed!'));

另外 .. 操作符可以嵌套使用

final addressBook = (AddressBookBuilder()
      ..name = 'jenny'
      ..email = 'jenny@example.com'
      ..phone = (PhoneNumberBuilder()
            ..number = '415-555-0100'
            ..label = 'home')
          .build())
    .build();

需要注意的是在方法上使用级联操作符很容易出错,例如下面代码就会出错。

// Does not work
var sb = new StringBuffer();
//sb.write() 函数返回一个 void, 无法在 void 上使用级联操作符。
sb.write('foo')..write('bar');

条件成员访问符(?.)

和 . 类似,但是左边的操作对象不能为 null,例如 foo?.bar 如果 foo 为 null 则返回 null,否则返回 bar 成员

上一篇下一篇

猜你喜欢

热点阅读