Dart学习第三章

Dart Operators

Posted by XYH on April 10, 2019

记录Dart学习第三章,操作符。

Operators(方法)

Dart的操作符大部分可以重载,具体参见重载操作符

概述

Dart的操作符大部分同其他类型语言,不记录普通操作符用法,仅记录部分需要注意的操作符。

类型判断操作符

操作符 说明
as 类型转换
is 如果对象是指定类型则返回true
is! 如果对象是指定类型则返回false

如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Person {
  int age;
  String name;
}

class Qfxl extends Person {
  Qfxl(String name) {
    this.name = name;
  }
}

void main() {
  var qfxl = Qfxl("qfxl");
  if (qfxl is Person) {
      print(qfxl.name);
  }
}

或者使用as

1
print((qfxl as Person).name);

赋值操作符

正常情况使用=来赋值,还有一个??=用来指定值为null的值。

1
2
3
a = value;   // 给 a 变量赋值
b ??= value; // 如果 b 是 null,则赋值给 b;
             // 如果不是 null,则 b 的值保持不变
1
2
3
4
5
var me = Qfxl("qfxl");
var per = Qfxl("hello");
per ??= me;

print(per.name); // hello
1
2
3
4
5
var me = Qfxl("qfxl");
var per = null;
per ??= me;

print(per.name); // qfxl

位操作符

操作符 说明
& AND
| OR
^ XOR
« 左移位
» 右移位

具体使用类似Java

条件表达式

Dart有两个特殊操作符来代替if else

condition ? expr1 : expr2

Java的三元运算符一致。

1
String getMSg(int age) => age < 25 ? "is Student" : "is not Student";

expr1 ?? expr2

如果expr1non-null,则返回expr1否则执行并返回返回expr2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Person {
  int age;
  String name;

  getMsg() => "name is $name";
}

class Qfxl extends Person {
  Qfxl(String name) {
    this.name = name;
  }

  String msg;

  @override
  getMsg() {
    return msg ?? super.getMsg();
  }
}

级联操作符(..)

级联操作符..可以在同一个对象连续调用多个函数以及访问成员变量。 如:

1
2
3
4
TextView()
      ..text = "按钮"
      ..textColor = Color.RED
      ..setOnClickListener((v) => toast("click"));

级联操作符并不是没有限制,如下就会报错。

1
2
var sb = new StringBuffer();
sb.write('foo')..write('bar');
1
sb.write()

返回的是一个void,无法在void上使用级联操作符。

其他操作符

操作符 名称 解释
() 调用方法 代表调用一个方法
[] 访问list 访问list中指定元素
. 访问成员元素 foo.bar
?. 条件成员元素访问 .类似,但是左边的操作符不能为null,如fool?.bar,如果foolnull则返回null否则返回bar成员。

其他具体使用方法,参见classes