【Flutter】Dart:运算符

news2024/10/19 14:48:28

在 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;  // 二进制为 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)

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

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

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, Guest

int? 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 = 2

count--;  // 先使用后递减,count = 1
--count;  // 先递减后使用,count = 0

运算符优先级

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

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

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

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

总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2218548.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度学习-机器学习与传统编程区别

在当今数字化时代&#xff0c;机器学习成为了技术领域的热门话题。本文将介绍机器学习与传统编程的不同之处&#xff0c;以及机器学习在解决复杂问题和实现智能化的巨大潜力&#xff0c;从处理方式、开发过程、驱动方式、技术要求和应用场景等5个方面进行介绍。 1、处理方式 机…

高效计算!|海鸥优化算法SOA理论与实现(Matlab/Python双语言教程)

文章来源于我的个人公众号&#xff1a;KAU的云实验台&#xff0c;主要更新智能优化算法的原理、应用、改进 MATLAB、PYTHON 海鸥是自然界中最常见的一类海鸟&#xff0c;主要以群居的生存方式遍布在各大海港、湖泊、河流地区。它们拥有较高的群集智慧&#xff0c;每到冬季&a…

冲锋衣市场洞察:全方位数据分析与趋势展望

冲锋衣整体数据分析 一. 概述 本报告基于从淘宝商品搜索接口和淘宝精确月销量接口中提取的数据&#xff0c;分析了前百个品牌在销售额上的占比情况。分析涵盖了销售额和占比的数据&#xff0c;为决策提供了依据。&#xff08;数据获取时间&#xff1a;2024.10.08&#xff09;…

数据分析方法(回归分析,决策树与神经网络,提升树,时间序列分析,假设检验,用户画像,竞品分析)等

1.回归分析 回归分析是一种统计方法&#xff0c;用于探索自变量&#xff08;预测变量&#xff09;和因变量&#xff08;目标变量&#xff09;之间的关系。它可以帮助预测变量的变化对目标变量的影响大小。例如&#xff0c;简单线性回归用于分析两个变量之间的线性关系&#xf…

快速创建一个vue项目并运行

前期准备工作: 1.安装node 2.安装npm 3.设置淘宝镜像 4.全局安装webpack 5.webpack 4.X 开始&#xff0c;需要安装 webpack-cli 依赖 6.全局安装vue-cli 正文开始: 1.创建项目 ,回车 vue init webpack vue-svg > Project name vue-demo 项目名称 回车 > Pro…

84.【C语言】数据结构之顺序表的头部插入和删除

目录 3.操作顺序表 1.分析头部插入函数 SeqList.c写入 容量检查函数 注意 main.c改为 SeqList.h添加SLPushFront的声明 运行结果 2.分析头部删除函数 SLPopFront代码 main.c改为 SeqList.h添加SLPopFront的声明 图分析 运行结果 承接83.【C语言】数据结构之顺序表…

文心一言 VS 讯飞星火 VS chatgpt (372)-- 算法导论24.4 4题

四、请将单源单目的地最短路径问题表示为一个线性规划问题。如果要写代码&#xff0c;请用go语言。 文心一言&#xff1a; 单源单目的地最短路径问题可以通过线性规划&#xff08;Linear Programming, LP&#xff09;进行建模。假设我们有一个加权有向图 $ G (V, E) $&#…

【LeetCode】每日一题 2024_10_14 鸡蛋掉落(记忆化搜索)

前言 每天和你一起刷 LeetCode 每日一题~ LeetCode 启动&#xff01; 题目&#xff1a;鸡蛋掉落 代码与解题思路 今天的题目是昨天的进阶版&#xff0c;昨天给了 2 个鸡蛋&#xff0c;让我们求在一栋有 n 层楼的建筑中扔鸡蛋的最大操作次数 但是今天的题目给了 k 个鸡蛋&am…

linux 离线安装redis

1.官网下载 https://redis.io/download 或者去github下载 2.安装 Redis 解压 unzip redis-6.2.16.zip安装gcc #由于 redis 是用 C 语言开发&#xff0c;安装之前必先确认是否安装 gcc 环境&#xff08;gcc -v&#xff09; gcc -v若无安装gcc&#xff0c;参考我的文章 Lin…

kaggle中如何更新上传自定义的数据集dataset?

前言: kaggle notebook中可以上传自己的数据集进行训练&#xff0c;但是如果我们发现这个数据集有一部分需要更新下呢&#xff0c;这时候我们不必新建一个数据集&#xff0c;直接在原来的版本上进行更新即可。 以datasett的更新为例&#xff0c;在这个界面是看不到更新按钮的 …

Axure使用echarts详细教程

本次使用的axure版本为rp9,下面是效果图。 接下来是详细步骤 【步骤1】在axure上拖一个矩形进来&#xff0c;命名为myChart(这个根据实际情况来,和后面的代码对应就好) 【步骤2】 点击交互->选择加载时->选择打开链接->链接外部地址 点击fx这个符号 【步骤3】在弹…

【建筑行业】在线培训知识库与人才培养

在快速变化的建筑行业中&#xff0c;人才培养一直是企业持续发展和创新的关键。随着数字化时代的到来&#xff0c;建筑行业面临着前所未有的挑战和机遇。在线培训知识库作为一种新兴的教育工具&#xff0c;正在成为建筑行业人才培养的重要支撑。本文将深入探讨建筑行业在线培训…

Bolt 一款AI 全栈 Web 在线开发工具

参考&#xff1a; https://bolt.new/ github项目也可以支持Bolt在线打开编辑 直接连接前输入&#xff0c;比如 https://github.com/lyz1810/live2dSpeek更换成 https://bolt.new/github.com/lyz1810/live2dSpeek https://bolt.new/github.com/oh-my-live2d/oh-my-live2d 主要偏…

《OpenCV计算机视觉》——人脸检测__Haar特征、级联分类器

文章目录 Haar特征一、定义与原理二、分类三、计算方法四、应用五、优缺点 级联分类器一、定义与原理二、结构与组成三、举例说明 Haar特征 Haar特征是一种在计算机视觉和图像处理中常用的特征描述方法&#xff0c;特别适用于物体识别&#xff0c;尤其是人脸检测。以下是对Haa…

自制编程语言(一、基本的编译器)

此教程实现一个simple语言 这是一个编译型语言&#xff0c;编译成nasm simple.h #include <iostream> #include <fstream> #include <sstream> #include <string> #include <unordered_set> #include <set>void clearFileContent(const…

如在下载自己的需要的rmp包呢

下载地址&#xff1a;https://pkgs.org/和https://rpmfind.net/linux/rpm2html/search.php 根基自己的需要进行下载使用。

IRMV Lab新作:Mamba Diffusion模型实现高精度2D手部轨迹预测

作者主页&#xff1a; https://bit-mjy.github.io/ https://xieyuanli-chen.com/ 论文标题&#xff1a; MADiff: Motion-Aware Mamba Diffusion Models for Hand Trajectory Prediction on Egocentric Videos 1. 背景与挑战 在具身人工智能&#xff08;Embodied AI&#xff0…

NAT机制

目录 1、NAT机制的定义 2、NAT机制的工作原理 1、NAT机制的定义 如今IP地址的分配已经不够使用&#xff0c;为了解决这一问题&#xff0c;NAT机制起到了很关键的作用。 NAT机制&#xff08;网络地址转换&#xff09;&#xff0c;本质上&#xff0c;让一个IP地址代表一批设备…

【SpringBoot】14 缓存(cache)

Gitee仓库 https://gitee.com/Lin_DH/system 介绍 Spring 框架支持透明地向应用程序添加缓存对缓存进行管理&#xff0c;其管理缓存的核心是将缓存应用于操作数据的方法&#xff08;包括增删查改等&#xff09;&#xff0c;从而减少操作数据的执行次数&#xff08;主要是查询…

录微课专用提词器,不会被录进视频中的提词器,还能显示PPT中备注的内容

不坑提词器&#xff0c;全称&#xff1a;不坑隐形提词器。是一款能够在截图、录屏、直播过程中隐藏界面的提词器软件。 系统要求&#xff1a;Win10 1024 以上&#xff08;特别提醒&#xff1a;Win7状态下不可隐身&#xff09; ⏬下载 提词器默认放在不坑盒子的安装目录下&…