【Flutter】Dart:运算符
在 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
关系运算符
关系运算符用于比较两个值,并返回布尔值 true
或 false
。常见的关系运算符有:
==
:等于!=
:不等于>
:大于<
:小于>=
:大于或等于<=
:小于或等于
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
如果 condition
为 true
,则返回 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 提供了两个用于检查对象类型的运算符:is
和 is!
。
is
:检查对象是否是某个类型,返回true
或false
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 提供了丰富的运算符,可以高效地处理数值、布尔、位运算等操作。本文详细介绍了算术运算符、关系运算符、逻辑运算符、位运算符、条件运算符和类型测试运算符等内容。通过掌握这些运算符,你可以更加自如地处理复杂的运算逻辑,提升代码的可读性和效率。
相关文章:
【Flutter】Dart:运算符
在 Dart 中,运算符是非常重要的组成部分,它们可以对变量和常量进行多种运算操作。理解和掌握 Dart 中的各种运算符不仅可以帮助你编写更加高效、简洁的代码,还能更好地理解其背后的逻辑和设计。本文将深入探讨 Dart 中的运算符,包…...

ChatGPT01-preivew体验报告:内置思维链和多个llm组合出的COT有啥区别呢?丹田与练气+中学生物理奥赛题测试,名不虚传还是名副其实?
一个月前,o1发布的时候,我写了篇文章介绍 逻辑推理能力堪比博士生,OpenAI发布全新AI模型系列: o1 - 大模型或许进入新阶段,还翻译了官方的介绍 解密OpenAI o1是如何让LLMs获得逻辑推理能力的 - CoT * RL,也…...

《云计算网络技术与应用》实训6-1:配置KVM虚拟机使用NAT网络
任务1、计算节点基础环境准备 1. 使用VMware安装CentOS 7虚拟机,安装时记得开启CPU虚拟化,命名为“KVMC6”。 2. (网卡配置和之前的一样,都用100网段)网关设置为192.168.100.1,地址段为192.168.100.10-25…...

【Unity新闻】Unity 6 正式版发布
Unity CEO Matt Bromberg 在今天自豪地宣布,Unity 6 正式发布!作为迄今为止最强大和稳定的版本,Unity 6 为游戏和应用开发者提供了大量的新功能和工具,帮助他们加速开发并提升性能。 本次正式版是6.0000.0.23f1(LTS&a…...

基于语音识别的停车共享小程序(lw+演示+源码+运行)
目 录 1 绪论1 1.1 课题研究背景1 1.2 研究现状1 1.3 论文结构安排1 2 系统关键技术2 2.1 微信小程序2 2.2 微信Web开发者工具2 2.3 JavaScript简介2 2.4 微信小程序API接口2 2.5 MYSQL数据库2 3 系统分析1 3.1 可行性分析1 3.1.1 技术可行性1 3.1.2 经济可行性1…...

编程考古-计算机发展(上)
计算机/器现在是我们日常生活中的重要工具,它的发展历程见证了人类数学计算能力的不断提升。 什么是计算 计算的本质在于基于规则对符号串进行变换。简言之,从一个初始的符号串(输入)出发,依据既定的法则逐步改变这个…...

pc轨迹回放制作
亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! 课程主题:pc轨迹回放制作 主要内容:制作车辆轨迹操作页,包括查询条件、动态轨迹回放、车辆轨迹详情表单等 应用场景:车辆…...
无向图中的一些问题与处理(上接无向图知识简记)
一、有向图中的排序与调度 1、深度优先搜索的排序 使用深度优先搜索对图中顶点进行排序,根据数据结构性质与递归保存顺序,有以下三种排列顺序 (1) 前序:在递归调用之前将顶点加入队列。 (2)后…...

AIGC助力小学生编程梦:C++入门不再难!
文章目录 一、AIGC时代下的编程教育新趋势二、小学生C入门趣味编程的意义三、小学生C入门趣味编程的实践策略四、面临的挑战与应对策略五、AIGC技术在小学生C编程中的应用与前景《小学生C趣味编程从入门到精通》编辑推荐内容简介作者简介目录 随着人工智能生成内容(…...

AI开发-三方库-Hugging Face-Pipelines
1 需求 需求1:pipeline支持的任务类型 需求2:推理加速使用CPU还是GPU 需求3:基于pipeline的文本分类示例 需求4:pipeline实现原理 模型使用步骤(Raw text -》Input IDs -》Logits -》Predictions)&…...

【Python网络编程】学习Socket编程,打造网络应用!
【Python网络编程】学习Socket编程,打造网络应用! 网络编程是现代计算机科学中的重要一环,几乎所有的应用都依赖网络传输数据。无论是创建简单的客户端-服务器模型,还是构建复杂的网络应用,Socket 编程都是关键的技术…...

docker (desktopcompose) download
docker docker-compose download 百度网盘获取离线包链接release-notes 参考dockerdocker-composewlspowershell...

即时通讯:单聊消息逻辑
在线消息(对方在线) 1.client发送消息到msg_server 2.msg_server判断消息有效性,每秒发送的消息不能超过限制,无误后转发给db_server 3.db_server判断为单聊 查找对应的会话,不存在则创建两个会话(双方…...

Libevent源码剖析之reactor
1 简介 reactor 是一种事件驱动的并发处理模式,常用于网络服务器和事件循环系统中。它主要的功能是通过单线程或者多线程处理I/O操作,避免阻塞,并且能够高效处理大量并发的事件。 one loop per thread or process,以下摘自 reacto…...

分享一套SpringBoot+Vue民宿(预约)系统
大家好,我是java1234_小锋老师,看到一个不错的SpringBootVue民宿(预约)系统,分享下嘿嘿。 项目介绍 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,…...
Linux——应用软件的生命周期
功能开发测试: 功能性测试 对应开发框架的测试用例代码的漏洞扫描 Web服务器版本应用开发语言的依赖关系和版本信息是否会造成类似内存泄露等影响系统性能的问题压力测试应用的部署 获取应用代码以及应用静态文件的代码包将安装包中的文件按照服务器配置的架构&…...

【Linux】exec系列函数详细介绍
首先,exec 是 execute (意为:执行) 的缩写。 exec系列函数 各个“后缀”的意思: l 为 list 可变参数列表、v 为 vector、p 为 PATH、e 为环境变量数组 envp execl:l 为 list 可变参数列表 原型:int execl(const char *path, cons…...

ARINC 429总线协议
一、概述 ARINC 是美国航空无线电公司英文字头的缩写, 该公司1977年7月21日出版了“ARINC 429规范”一书,429规范就是飞机电子系统之间数字式数据传输的标准格式,在飞机上使用429总线的电子设备均应遵守这个规范,这样才能保证电子…...
Qt解决槽函数中发送的信号的参数会变化带来的错误
connect(item, &MusicItemWidget::playRequest, this, [this] { emit playMusic(QUrl(this->m_mediaPath); ); 如上图,this->m_mediaPath是个成员变量,但自己的初衷是发送一个最开始捕获的值,那么可以使用下面的方法…...
C C++ 如何编写库级接口
初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...
从面试角度回答Android中ContentProvider启动原理
Android中ContentProvider原理的面试角度解析,分为已启动和未启动两种场景: 一、ContentProvider已启动的情况 1. 核心流程 触发条件:当其他组件(如Activity、Service)通过ContentR…...
Kafka主题运维全指南:从基础配置到故障处理
#作者:张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1:主题删除失败。常见错误2:__consumer_offsets占用太多的磁盘。 主题日常管理 …...