dart系列之:dart语言中的特殊操作符

简介: dart系列之:dart语言中的特殊操作符

dart系列之:dart语言中的特殊操作符


目录



简介


有运算就有操作符,dart中除了普通的算术运算的操作符之外,还有自定义的非常特殊的操作符,今天带大家一起来探索一下dart中的特殊操作符。


普通操作符


普通操作符就很好解释了,就是加减乘除,逻辑运算符,比较运算符和位运算符等。


这些操作符和其他语言的操作符没什么差别,这里就不详细介绍了。大家看几个普通操作符的例子:


a++
a + b
a = b
a == b
c ? a : b
assert(2 == 2);
assert(2 != 3);
assert(3 > 2);
assert(2 < 3);


类型测试操作符


dart中的类型测试符类似JAVA中的instance of操作,主要有三个,分别是as,is和is!


其中is是类型判断操作符,而as是类型转换操作符,也就是常说的强制转换。


对下面的语句来说,如果obj是T的子类或者实现了T的接口,那么就会返回true。


obj is T


而下面的语句则会始终返回true:


obj is Object?


dart中的as操作符表示的是类型转换,转换类型之后就可以使用对应类型中的方法了。如下所示:


(student as Student).firstName = 'Bob';


那么问题来了,上面的写法和下面的写法有什么区别吗?


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


第一种写法中,如果student是空,或者不是Student的实例,则会报错,而第二种并不会。


条件运算符


dart中也支持条件运算符,最常见的就是三元运算符:


condition ? expr1 : expr2


表示如果condition是true,则返回expr1, 否则返回expr2。


我们在日常的工作中,经常会有一些判空操作,dart为我们提供了非常简便的判空操作符:


expr1 ?? expr2


上式表示如果expr1为空,则选择expr2。举个例子:


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


级联符号


级联符号是 .. 或者?.. , 用来在同一对象上进行序列操作,级联操作可以让我们少写很多代码,可以在创建一个对象的同时,给对象赋值:


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


上面的代码等同于:


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


如果对象可能为空,则可以在第一个级联操作符之前加上?,这样如果对象为空的话,后续的级联操作都不会进行,如下所示:


var paint = Paint()
  ?..color = Colors.bla
  ..strokeCap = Stroke
  ..strokeWidth = 5.0;


类中的自定义操作符


在dart中可以实现类似C++那种操作符的重写功能。可以实现对象之间的加减乘除之类的运算。


比如下面的类中,我们自定义了类之间的加法和减法运算:


class Vector {
  final int x, y;
  Vector(this.x, this.y);
  Vector operator +(Vector v) => Vector(x + v.x, y + v.y);
  Vector operator -(Vector v) => Vector(x - v.x, y - v.y);
  // Operator == and hashCode not shown.
  // ···
}
void main() {
  final v = Vector(2, 3);
  final w = Vector(2, 2);
  assert(v + w == Vector(4, 5));
  assert(v - w == Vector(0, 1));
}


自定义操作符是用operator关键字来修饰的,非常的方便。


总结



以上就是dart中的操作符的介绍和使用。

相关文章
N..
|
5月前
|
Dart
Dart语言中类的定义和使用
Dart语言中类的定义和使用
N..
57 0
|
5月前
|
Dart 数据安全/隐私保护
Dart笔记:Dart 语言中的存取器及其用法解析
Dart笔记:Dart 语言中的存取器及其用法解析
75 0
|
存储 Dart
[Flutter]足够入门的Dart语言系列之常见运算符或操作符
Dart中的运算符提供对数据操作和处理的能力,其中的算术运算符、逻辑运算符非常符合现实中的使用情况,其他不同的运算符则有着自己的操作逻辑...
593 0
[Flutter]足够入门的Dart语言系列之常见运算符或操作符
|
2月前
|
Dart 安全 编译器
Dart-理解空安全中的的操作符
Dart-理解空安全中的的操作符
42 2
N..
|
5月前
|
Dart
Dart语言
Dart语言
N..
38 0
N..
|
5月前
|
存储 Dart
Dart语言的内置数据类型
Dart语言的内置数据类型
N..
27 0
N..
|
5月前
|
自然语言处理 Dart 算法
Dart语言中函数的定义
Dart语言中函数的定义
N..
35 0
|
存储 Dart JavaScript
【Dart语言解密】想要深入了解Dart语法和类型变量吗?
【Dart语言解密】想要深入了解Dart语法和类型变量吗?
157 0
|
存储 Dart 安全
《深入浅出Dart》Dart中的泛型
Dart中泛型 泛型,一种强大而灵活的编程工具,可以让开发者创建可以适应任何类型的代码,同时又保持类型安全。这是在许多编程语言中都存在的一种重要的特性,Dart也不例外。在这篇文章中,我们将深入探讨Dart中的泛型。
133 0