Dart学习-操作符 --一些符号的解释

dart定义了下表所示的运算符。你可以重写许多这些运算符。

描述 运算符 描述
一元后缀 expr++ expr-- () [] . ?.
一元前缀 -expr !expr ~expr ++expr --expr
乘法类型 * / % ~/ %取余 ~/取整
加法类型 + -
移动位运算 << >>
与位运算 &
异或位运算 ^
或位运算 |
关系和类型测试 >= <= > < as is is!
等式 == != 值比较
逻辑与 &&
逻辑或 ||
条件 expr1 ? expr2 : expr3
级联 ..
赋值 = *= /= ~/= %= += -= <<= >>= &= ^= |= ??=

Dart 相对于Java 一些特殊操作符讲解

等式和关系运算符

要测试两个对象x和y是相等,请使用= =运算符。在极少数情况下,您需要知道两个对象是否是完全相同的对象,请改用experation()函数。以下是==运算符的工作原理:

如果x或y为空,如果两者都为空,则返回true;如果只有一个为空,则返回false。
返回一个函数调用的结果:x.==(y)。(这个调用是正确的,像==这样的运算符实际上是由第一个操作数所调用的一个方法。你>可以重写大部分运算符。

赋值操作符(示例) - 赋值操作符

// 赋值给a
a = value;
// 如果b为空,则将值分配给b;否则,b保持不变
b ??= value;

类型测试操作符

as、is 和 is! 操作符在运行时用于检查类型非常方便。

if (emp is Person) {
  // Type check
  emp.firstName = '永动机';
}

你也可以通过as来简化代码:

(emp as Person).firstName = '永动机';

位运算

通常我们指位运算为<<或>>移动位运算,通过操作位的移动来达到运算的目的,而&,|,^,~expr也是操作位来达到运算的目的。所以本文统称这些运算都为位运算

实例

final value = 0x22;
final bitmask = 0x0f;

assert((value & bitmask)  == 0x02);  // 与
assert((value & ~bitmask) == 0x20);  // 与非
assert((value | bitmask)  == 0x2f);  // 或
assert((value ^ bitmask)  == 0x2d);  // 异或
assert((value << 4)       == 0x220); // 左移
assert((value >> 4)       == 0x02);  // 右移

级联符号(…)

级联(…)允许您对同一对象执行一系列操作。除了函数调用,您还可以访问同一对象上的字段。这通常会省去创建临时变量的步骤,并允许您编写更多的级联代码。

示例代码:

querySelector('#confirm') // 获取一个对象
  ..text = 'Confirm' // 使用它的成员
  ..classes.add('important')
  ..onClick.listen((e) => window.alert('Confirmed!'));

第一个方法调用querySelector(),返回一个selector对象。遵循级联符号的代码对这个selector对象进行操作,忽略任何可能返回的后续值。

前面的例子相当于:

var button = querySelector('#confirm');
button.text = 'Confirm';
button.classes.add('important');
button.onClick.listen((e) => window.alert('Confirmed!'));

你也可以嵌套你的级联。例如:

final addressBook = (AddressBookBuilder()
      ..name = 'jenny'
      ..email = '[email protected]'
      ..phone = (PhoneNumberBuilder()
            ..number = '415-555-0100'
            ..label = 'home')
          .build())
    .build();

注意:严格来说,级联的“双点”符号不是运算符。这只是Dart语法的一部分。

你可能感兴趣的:(Flutter)