《深入浅出Dart》运算符

运算符

运算符是一种特殊的符号,用于检查,更改或结合值。Dart语言中的运算符主要包括以下几类:

1. 算术运算符

算术运算符用于进行数学运算。Dart中的算术运算符有 +(加),-(减),*(乘),/(除),%(取余)以及~/(取整)。

var a = 10;
var b = 2;

print(a + b); // 输出:12
print(a - b); // 输出:8
print(a * b); // 输出:20
print(a / b); // 输出:5.0
print(a % b); // 输出:0
print(a ~/ b); // 输出:5

2. 关系运算符

关系运算符用于比较两个值。Dart中的关系运算符有 ==(等于),!=(不等于),>(大于),<(小于),>=(大于或等于),<=(小于或等于)。

var a = 10;
var b = 2;

print(a == b); // 输出:false
print(a != b); // 输出:true
print(a > b); // 输出:true
print(a < b); // 输出:false
print(a >= b); // 输出:true
print(a <= b); // 输出:false

3. 逻辑运算符

逻辑运算符主要用于Boolean类型的操作,但也可以用于非Boolean类型。Dart中的逻辑运算符有 &&(逻辑与),||(逻辑或),!(逻辑非)。

var a = true;
var b = false;

print(a && b); // 输出:false
print(a || b); // 输出:true
print(!a); // 输出:false

4. 赋值运算符

赋值运算符用于给变量赋值。Dart中的赋值运算符有 =+=-=*=/=%=~/=

var a = 10;
var b = 2;

a = b;
print(a); // 输出:2

a += b;
print(a); // 输出:4

a -= b;
print(a); // 输出:2

a *= b;
print(a); // 输出:4

a ~/= b;
print(a); // 输出:2

a %= b;
print(a); // 输出:0

5. 条件运算符

Dart提供了两种类型的条件运算符,分别是 ? :??。其中 ? : 可以在基于条件的情况下返回两个值中

的一个,?? 用于在第一个操作数为null时返回第二个操作数。

var a = 10;
var b = null;

print(a > 10 ? 'a is greater than 10' : 'a is not greater than 10'); // 输出:a is not greater than 10
print(b ?? 'default value'); // 输出:default value

6. 类型测试运算符

类型测试运算符用于检查对象的类型。Dart中的类型测试运算符有 isis!

var a = 10;

print(a is int); // 输出:true
print(a is! String); // 输出:true

7. 位运算符

位运算符用于对整数进行二进制位运算。Dart中的位运算符有 &(与),|(或),^(异或),~(非),>>(右移),<<(左移)。

var a = 10; // 二进制形式:1010
var b = 2; // 二进制形式:0010

print(a & b); // 输出:2
print(a | b); // 输出:10
print(a ^ b); // 输出:8
print(~a); // 输出:-11
print(a >> b); // 输出:2
print(a << b); // 输出:40

这些都是Dart语言中的基本运算符,熟悉这些运算符可以帮助我们更好地理解和编写Dart程序。

速查表

以下列出了 Dart 的运算符,从高到低按照优先级排列:

描述运算符
一元运算符(后置)++ -- ( ) [ ] . ?.
一元运算符(前置)- ! ~ ++ --
乘法运算符* / % ~/
加法运算符+ -
移位运算符<< >>
按位与&
按位异或
按位或|
关系与类型检测>= > <= < as is is!
逻辑与&&
逻辑或||
是否为null??
条件运算符? :
级联运算符..
赋值运算符= *= /= ~/= %= += -= <<= >>= &= ^= |= ??=

与其他类语言比较,Dart的运算符大同小异,这里只选出部分Dart特有的运算符(上表中使用斜粗体的运算符)进行讲解:

运算符介绍示例
?.点符号前加问号,表示当前调用只在被访问者不为null的情况下才执行var upper = name?.toUpperCase();
is is!检查对象是否属于或不属于某种类型if (name is String) { ... }
as将对象转换为某类型,如果转换失败将抛出异常name as String
??空值检测,如:a1 ?? a2 ,表示如果a1不为null,则直接返回a1的值,否则返回a2的值var message = input ?? 'Hello';
..级联操作符,用于对同一对象执行一系列操作(链式操作),避免创建多余的临时变量不使用级联:person.name = 'bob'; person.age = 28; 使用级联:person..name = 'bob' ..age = 28;
??=空值判断赋值,只在左值为null的情况下才执行赋值操作message ??= 'Hello';
posted @   linwu-hi  阅读(108)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
点击右上角即可分享
微信分享提示