【Flutter】Dart:运算符

embedded/2024/10/24 2:17:19/

在 Dart 中,运算符是非常重要的组成部分,它们可以对变量和常量进行多种运算操作。理解和掌握 Dart 中的各种运算符不仅可以帮助你编写更加高效、简洁的代码,还能更好地理解其背后的逻辑和设计。本文将深入探讨 Dart 中的运算符,包括算术运算符、关系运算符、逻辑运算符、位运算符、条件运算符以及测试类型运算符等。

算术运算符

算术运算符用于基本的数学计算,如加法、减法、乘法等。Dart 提供了以下几种常见的算术运算符:

  • +:加法
  • -:减法
  • *:乘法
  • /:除法,结果为浮点数
  • ~/:整除,结果为整数
  • %:取模运算,返回余数
int a = 10;
int b = 3;int sum = a + b;  // 加法,sum = 13
int difference = a - b;  // 减法,difference = 7
int product = a * b;  // 乘法,product = 30
double quotient = a / b;  // 除法,quotient = 3.3333...
int intQuotient = a ~/ b;  // 整除,intQuotient = 3
int remainder = a % b;  // 取模,remainder = 1

关系运算符

关系运算符用于比较两个值,并返回布尔值 truefalse。常见的关系运算符有:

  • ==:等于
  • !=:不等于
  • >:大于
  • <:小于
  • >=:大于或等于
  • <=:小于或等于
int x = 5;
int y = 10;print(x == y);  // false
print(x != y);  // true
print(x > y);  // false
print(x < y);  // true
print(x >= 5);  // true
print(y <= 10);  // true

逻辑运算符

逻辑运算符用于布尔值之间的逻辑运算,主要包括:

  • &&:逻辑与(AND),只有两个操作数都为 true 时,结果为 true
  • ||:逻辑或(OR),只要有一个操作数为 true,结果为 true
  • !:逻辑非(NOT),将布尔值取反
bool isFlutterFun = true;
bool isDartHard = false;print(isFlutterFun && !isDartHard);  // true
print(isFlutterFun || isDartHard);  // true
print(!isFlutterFun);  // false

位运算符

位运算符用于对整数的二进制位进行操作。Dart 支持以下位运算符:

  • &:按位与
  • |:按位或
  • ^:按位异或
  • ~:按位取反
  • <<:左移
  • >>:右移
int a = 5;  // 二进制为 0101
int b = 3;  // 二进制为 0011print(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)

条件运算符(三元运算符)

条件运算符,也称三元运算符,用于根据条件返回不同的结果。它的语法是:

condition ? expr1 : expr2

如果 conditiontrue,则返回 expr1;否则,返回 expr2

int a = 5;
int b = 10;String result = (a > b) ? 'a is greater' : 'b is greater';
print(result);  // 输出 b is greater

空安全运算符

Dart 中还有一些空安全运算符,用于处理可能为 null 的变量:

  • ??:如果左侧为 null,则返回右侧值
  • ??=:如果变量为 null,则赋值
  • ?.:如果对象不为 null,则调用其方法或属性
String? name;
String greeting = name ?? 'Hello, Guest';  // 如果 name 为 null,则使用默认值
print(greeting);  // 输出 Hello, Guestint? value;
value ??= 42;  // 如果 value 为 null,则赋值为 42
print(value);  // 输出 42

测试类型运算符

Dart 提供了两个用于检查对象类型的运算符:isis!

  • is:检查对象是否是某个类型,返回 truefalse
  • is!:检查对象是否不是某个类型
var x = 123;if (x is int) {print('x is an integer');
}if (x is! String) {print('x is not a string');
}

赋值运算符

赋值运算符用于将值赋给变量,最常用的赋值运算符是 =,此外还有一些组合运算符。

  • =:简单赋值
  • +=:加法赋值
  • -=:减法赋值
  • *=:乘法赋值
  • /=:除法赋值
  • %=:取模赋值
int a = 10;a += 5;  // a = a + 5,结果为 15
a -= 3;  // a = a - 3,结果为 12
a *= 2;  // a = a * 2,结果为 24
a ~/= 4;  // a = a ~/ 4,结果为 6

累加器和自增自减运算符

Dart 提供了简洁的方式来增加或减少变量的值。

  • ++:自增运算符,将变量的值增加 1
  • --:自减运算符,将变量的值减少 1

这些运算符既可以作为前缀也可以作为后缀。

int count = 0;count++;  // 先使用后递增,count = 1
++count;  // 先递增后使用,count = 2count--;  // 先使用后递减,count = 1
--count;  // 先递减后使用,count = 0

运算符优先级

在 Dart 中,运算符有优先级。运算符优先级决定了它们在表达式中的计算顺序。例如,乘法和除法的优先级高于加法和减法。

int result = 2 + 3 * 4;  // 输出 14,因为乘法优先级高于加法

可以通过使用括号来改变运算优先级:

int result = (2 + 3) * 4;  // 输出 20

总结

Dart 提供了丰富的运算符,可以高效地处理数值、布尔、位运算等操作。本文详细介绍了算术运算符、关系运算符、逻辑运算符、位运算符、条件运算符和类型测试运算符等内容。通过掌握这些运算符,你可以更加自如地处理复杂的运算逻辑,提升代码的可读性和效率。


http://www.ppmy.cn/embedded/129956.html

相关文章

OpenCV高级图形用户界面(9)更改指定窗口的位置函数moveWindow()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 将窗口移动到指定的位置。 cv::moveWindow() 函数用于更改指定窗口的位置。你可以使用这个函数来移动窗口到屏幕上的任何位置。 函数原型 void …

蓝桥算法双周赛 第 19 场 小白入门赛

打开石门 只要有相连的一样字母就可以消成一个 string s; int ans;void solve() {cin >> s;int len 0;for (int i 0;i < s.size();i ){if (s[i] L) len ;else //遇到Q{ans (len ? 1 : 0); //消除累计的Llen 0;ans ;//遇到Q}}//QLLLL时,最后遇不到Q让累计的L消…

React 进阶阶段学习计划

React 进阶阶段学习计划 目标 掌握自定义Hooks的创建和使用。深入理解上下文&#xff08;Context&#xff09;和Redux的高级用法。学会服务端渲染&#xff08;SSR&#xff09;。深入探讨性能优化技巧。 学习内容 自定义Hooks 创建和使用自定义Hooks 自定义Hooks&#xff1…

【设计模式-原型】

**原型模式&#xff08;Prototype Pattern&#xff09;**是一种创建型设计模式&#xff0c;旨在通过复制现有对象的方式来创建新对象&#xff0c;而不是通过实例化类来创建对象。该模式允许对象通过克隆&#xff08;复制&#xff09;来创建新的实例&#xff0c;因此避免了重新创…

js 基础补充3

1. 闭包 在函数内部定义的函数&#xff0c;可以访问改函数的属性和方法 私有属性 延长变量的生命周期&#xff0c;更好的避免命名冲突 缺点&#xff1a;内存消耗比较大&#xff0c;不建议频繁使用 2. js 原型 原型链 访问对像的属性方法&#xff0c;不光会在对象上查找还会在…

大厂面试真题-了解云原生吗,简单说一下docker和k8s

K8s&#xff08;Kubernetes&#xff09;和Docker都是容器化技术中的关键组件&#xff0c;但它们各自扮演着不同的角色。以下是对这两者的详细解析&#xff1a; 一、Docker Docker是一个开源的容器化平台&#xff0c;它允许开发人员将应用程序及其依赖项打包为一个独立的镜像&…

【利用Seaborn进行高级数据可视化】创建美观且信息丰富的图表!

利用Seaborn进行高级数据可视化&#xff1a;创建美观且信息丰富的图表 数据可视化是数据分析和科学研究中不可或缺的部分。通过有效的图表&#xff0c;我们可以迅速了解数据的分布、趋势和关系。在Python的数据科学生态系统中&#xff0c;Seaborn是一个基于Matplotlib的高级库…

基于单片机的 OLED 显示终端设计分析与研究

摘要: 我国的经济发展速度正在不断加快,经济体制也在经历着一系列的改革,工业发展也正是受到了它的影响,逐步发生变化。在这样的背景下,传统的 LCD 显示技术,逐渐被显示效果更好,功耗更低的 OLED 代替。本文主要介绍了基于单片机的 OLED 显示终端设计,该设计目前具有很…