当前位置:网站首页 > 编程语言 > 正文

dart语言怎么样_主流编程语言

第二节:操作符

Dart 提供了丰富的操作符,用于执行算术运算、比较、逻辑操作、赋值、类型检查、位操作等。本节将全面介绍 Dart 中的所有操作符,并对每个操作符进行详细解释和示例说明。

1. 算术操作符

算术操作符用于执行数学计算。

操作符 描述 示例 结果
+ 加法 5 + 3 8
- 减法 5 - 3 2
* 乘法 5 * 3 15
/ 除法 5 / 2 2.5
~/ 整数除法 5 ~/ 2 2
% 取余数 5 % 2 1
-expr 一元负号 -a 取反 a 的值

示例:

void main() { int a = 10; int b = 3; print(a + b); // 输出: 13 print(a - b); // 输出: 7 print(a * b); // 输出: 30 print(a / b); // 输出: 3.33335 print(a ~/ b); // 输出: 3 print(a % b); // 输出: 1 print(-a); // 输出: -10 } 

2. 赋值操作符

赋值操作符用于将值赋给变量,并支持与算术操作符结合的复合赋值操作。

操作符 描述 示例 结果
= 赋值 a = b 将 b 赋给 a
+= 加法赋值 a += b a = a + b
-= 减法赋值 a -= b a = a - b
*= 乘法赋值 a *= b a = a * b
/= 除法赋值 a /= b a = a / b
~/= 整数除法赋值 a ~/= b a = a ~/ b
%= 取余赋值 a %= b a = a % b
??= 空值赋值 a ??= b 如果 a 为 null,则赋值 b

示例:

void main() { int a = 5; a += 3; // 相当于 a = a + 3 print(a); // 输出: 8 double b = 10.0; b /= 2; // 相当于 b = b / 2 print(b); // 输出: 5.0 String? name; name ??= 'Dart'; // 如果 name 为 null,则赋值 'Dart' print(name); // 输出: Dart } 

3. 比较操作符

比较操作符用于比较两个值,结果为布尔值 true 或 false

操作符 描述 示例 结果
== 等于 a == b 如果 a 等于 b,则为 true
!= 不等于 a != b 如果 a 不等于 b,则为 true
> 大于 a > b 如果 a 大于 b,则为 true
< 小于 a < b 如果 a 小于 b,则为 true
>= 大于等于 a >= b 如果 a 大于等于 b,则为 true
<= 小于等于 a <= b 如果 a 小于等于 b,则为 true

示例:

void main() { int a = 5; int b = 3; print(a == b); // 输出: false print(a != b); // 输出: true print(a > b); // 输出: true print(a < b); // 输出: false print(a >= b); // 输出: true print(a <= b); // 输出: false } 

4. 逻辑操作符

逻辑操作符用于连接布尔表达式。

操作符 描述 示例 结果
&& 逻辑与 a && b a 和 b 都为 true,结果为 true
` ` 逻辑或
! 逻辑非 !a a 为 true,结果为 false

示例:

void main() { bool a = true; bool b = false; print(a && b); // 输出: false print(a || b); // 输出: true print(!a); // 输出: false } 

5. 位操作符

位操作符用于对整数类型的二进制位进行操作。

操作符 描述 示例 结果
& 按位与 a & b 对 a 和 b 的每一位执行与操作
` ` 按位或 `a
^ 按位异或 a ^ b 对 a 和 b 的每一位执行异或操作
~expr 按位取反 ~a 对 a 的每一位取反
<< 左移 a << b 将 a 的二进制位左移 b 位
>> 右移 a >> b 将 a 的二进制位右移 b 位
>>> 无符号右移 a >>> b 无符号右移 b 位(Dart 2.14 引入)

示例:

void main() { int a = 5; // 二进制:0101 int b = 3; // 二进制:0011 print(a & b); // 输出: 1 (0001) print(a | b); // 输出: 7 (0111) print(a ^ b); // 输出: 6 (0110) print(~a); // 输出: -6 (取反) print(a << 1); // 输出: 10 (1010) print(a >> 1); // 输出: 2 (0010) } 

6. 类型测试操作符

类型测试操作符用于检查对象的类型。

操作符 描述 示例 结果
is 检查对象是否为指定类型 a is int 如果 a 是 int 类型,结果为 true
is! 检查对象是否不是指定类型 a is! String 如果 a 不是 String 类型,结果为 true
as 类型转换 a as String 将 a 转换为 String 类型(如果类型不匹配会抛出异常)

示例:

void main() { dynamic a = 'Hello'; if (a is String) { print('a 是字符串'); } String b = a as String; print(b); // 输出: Hello } 

7. 条件表达式

条件表达式用于根据条件的真假来选择性地执行代码。

7.1 三元运算符

语法:condition ? expr1 : expr2

当 condition 为 true 时,结果为 expr1;否则结果为 expr2

示例:

void main() { int a = 5; String result = (a > 3) ? '大于3' : '小于等于3'; print(result); // 输出: 大于3 } 
7.2 空值合并运算符
操作符 描述 示例 结果
?? 如果左侧值为 null,返回右侧值 a ?? b 如果 a 为 null,结果为 b
??= 如果变量为 null,赋值右侧值 a ??= b 如果 a 为 null,则 a = b

示例:

void main() { String? name; String greeting = 'Hello, ' + (name ?? 'Guest'); print(greeting); // 输出: Hello, Guest name ??= 'Dart'; print(name); // 输出: Dart } 

8. 级联操作符

级联操作符用于对同一个对象连续执行多个操作。

操作符 描述 示例
.. 级联操作符 object..method1()..method2()
?.. 空安全级联操作符 object?..method()

示例:

class Builder { int? width; int? height; String? color; void setWidth(int w) => width = w; void setHeight(int h) => height = h; void setColor(String c) => color = c; } void main() { Builder builder = Builder() ..setWidth(100) ..setHeight(200) ..setColor('red'); print('宽度: ${builder.width}, 高度: ${builder.height}, 颜色: ${builder.color}'); // 输出: 宽度: 100, 高度: 200, 颜色: red } 

9. 访问操作符

用于访问对象的属性或方法,或调用函数。

操作符 描述 示例
. 访问成员 object.property
?. 空安全访问成员 object?.property
[] 访问集合的元素 list[index]
?[] 空安全访问集合的元素 list?[index]
() 调用函数或方法 function()

示例:

void main() { List<int>? numbers; print(numbers?[0]); // 输出: null,不会抛出异常 numbers = [1, 2, 3]; print(numbers[0]); // 输出: 1 } 

10. 扩展操作符

用于在集合中插入另一个集合的所有元素。

操作符 描述 示例
... 扩展运算符 [...list]
...? 空安全扩展运算符 [...?list]

示例:

void main() { List<int> list1 = [1, 2, 3]; List<int>? list2; List<int> combinedList = [0, ...list1, ...?list2]; print(combinedList); // 输出: [0, 1, 2, 3] } 

11. 异步操作符

11.1 await 和 async

用于处理异步操作。

示例:

Future<String> fetchData() async { await Future.delayed(Duration(seconds: 2)); return '数据加载完成'; } void main() async { print('开始加载'); String data = await fetchData(); print(data); // 输出: 数据加载完成(延迟2秒) } 
11.2 yield 和 yield*

用于生成器函数。

示例:

Stream<int> countStream(int max) async* { for (int i = 1; i <= max; i++) { yield i; } } void main() async { await for (int i in countStream(3)) { print(i); // 输出: 1 2 3 } } 

12. 操作符重载

Dart 允许在类中重载部分操作符,使其适用于自定义对象。

可重载的操作符包括:

  • 算术操作符:+-*/~/%
  • 比较操作符:==><>=<=
  • 位操作符:&|^~<<>>
  • 索引操作符:[][]=
  • 一元操作符:-~

示例:

class Vector { final int x, y; Vector(this.x, this.y); // 重载加法操作符 Vector operator +(Vector other) => Vector(x + other.x, y + other.y); // 重载等于操作符 @override bool operator ==(Object other) => other is Vector && x == other.x && y == other.y; @override int get hashCode => x.hashCode ^ y.hashCode; @override String toString() => 'Vector(``x, ``y)'; } void main() { Vector v1 = Vector(2, 3); Vector v2 = Vector(4, 5); Vector v3 = v1 + v2; print(v3); // 输出: Vector(6, 8) print(v1 == v2); // 输出: false } 

总结

Dart 提供了丰富且灵活的操作符,可以满足各种编程需求。理解并熟练运用这些操作符,将有助于编写更高效、简洁的代码。

到此这篇dart语言怎么样_主流编程语言的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • dart编程语言pdf_第一个编程语言2024-11-14 08:36:09
  • dart语言怎么样_做游戏用什么编程语言2024-11-14 08:36:09
  • 探秘《Dart编程语言实战》:深入理解与高效开发2024-11-14 08:36:09
  • dart编程语言pdf下载_C语言基础2024-11-14 08:36:09
  • dart语言教程_计算机编程语言2024-11-14 08:36:09
  • dart编程语言pdf下载_fortran编程语言2024-11-14 08:36:09
  • dart编程语言pdf_scratch2.0编程2024-11-14 08:36:09
  • dart编程语言pdf下载_哪种编程语言最难学2024-11-14 08:36:09
  • dart语言 知乎_fortran编程语言2024-11-14 08:36:09
  • 编程语言讲解_古老的编程语言2024-11-14 08:36:09
  • 全屏图片