Dart 3.5语法 28-29
028问号可选类型可空类型保存null空String的isEmpty和NotEmpty
?问号可选类型可空类型保存null叹号强制解包??双冒号运算符String的isEmpty和isNotEmpty
-
? 问号可选类型,可空类型
-
可选类型可以保存null,就是空的意思
-
String.isEmpty 是判断是否是空白字符串,他并不是null,不是空,依然有值,只不过值是空白字符串""
-
isNotEmpty跟isEmpty完全相反,是判断是否不是空白字符串
-
如果给可选类型赋值null,那么isEmpty不能运行
-
!强制解包,把可选类型变成非可选类型,例如把String?变成String,把int? 变成int但是如果可选类型里面保存的值是null,那么运行报错
-
str!; //!强制解包,把?可选类型变成正常的String类型,但是因为str!强制解包以后,里面真的是一个null,运行会报错
-
双冒号?? 运算符,代表,如果?? 左边是null,那么就返回右边的值,如果左边不是null,那么就返回做编制
1. 问号可选类型(可空类型)
main() {// ? 问号可选类型,可空类型int? i1 = 100;i1 = null; // null代表空print(i1);}
运行结果
null
解释
-
int? i1 = 100;
定义了一个可选类型(可空类型)的变量i1
,它可以存储int
类型的值,也可以是null
。 -
i1 = null;
将i1
赋值为null
,表示该变量不保存任何有效值。 -
print(i1);
输出null
,因为i1
被赋值为null
。
2. 可选类型的默认值
main() {// 如果可选类型没有赋值初始值,那么默认值是nullint? i2;print(i2);}
运行结果
null
解释
-
int? i2;
声明了一个可选类型的变量i2
,但是没有给它赋初值。 -
Dart 中可选类型(
?
)的变量如果没有显式赋值,则默认值是null
。 -
print(i2);
输出null
,因为i2
没有赋值,默认值为null
。
3. 字符串可选类型
main() {String? str;str = "abc";print(str);}
运行结果
abc
解释
-
String? str;
声明了一个可选类型的字符串变量str
,它可以存储一个String
类型的值或null
。 -
str = "abc";
将str
赋值为一个非空字符串"abc"
。 -
print(str);
输出abc
,因为str
被赋值为字符串"abc"
。
4. 使用 isEmpty
和 isNotEmpty
判断字符串是否为空
main() {String? str;str = "abc";bool r1 = str.isEmpty; // 判断str是否为空字符串(""),此时str为"abc",返回falser1 = str.isNotEmpty; // 判断str是否不是空字符串,此时str为"abc",返回trueprint(r1);}
运行结果
true
解释
-
str.isEmpty;
判断str
是否为空字符串。由于str
的值是"abc"
,它不是空字符串,因此isEmpty
返回false
。 -
str.isNotEmpty;
判断str
是否不是空字符串。由于str
的值是"abc"
,它不是空字符串,因此isNotEmpty
返回true
。 -
print(r1);
输出true
,因为最后r1
保存的是str.isNotEmpty
的返回值。
029可空类型叹号强制解包问号双问号运算符trycatch捕获异常
1. 强制解包(!
)
// 因为可选类型不能进行 运算,例如 判断是否 >60,所以用 !强制解包,把 可选类型变成普通的非空类型// !强制解包,把可选类型变成非可选类型,例如把String?变成String,把int? 变成int但是如果可选类型里面保存的值是null,那么运行报错//把可选类型当做函数形参/*try{//容易出错的代码}catch(e){//出错后执行的代码}*/
-
score!
是 Dart 中的 强制解包运算符。它的作用是将一个可选类型(例如int?
,即可以为null
或int
的类型)转换为非空类型(int
)。 -
score
是一个int?
类型的变量,意味着它可以存储一个int
或者null
。但通过!
运算符,开发者明确告诉 Dart 编译器:“我确定score
不是null
,请将其作为非空的int
来处理。” -
如果
score
的值为null
,在执行score!
时,Dart 会抛出一个运行时异常,程序会中断。
fn1(int? score) {// 强制解包try {score!; // 当强制解包里面存的值是null的时候,程序会中断if (score > 60) {print("及格");} else {print("不及格");}} catch (e) {print("e=$e");}var s2 = score; // 上面的强制解包在try里面,作用于不一样,这里score没有去掉null,还是可选类型score = 100;// score!; // 这里运行会有警告,因为上面已经给score赋值了0,那么编译器已经把score当做int类型来看,不能再使用强制解包}
运行结果
-
如果传递
null
给
score
,程序会抛出异常并输出:
e=NoSuchMethodError: The method '>' was called on null.
-
如果传递
100
给
score
,程序会输出:
及格
解释
-
score!
是强制解包,它将可选类型(int?
)转换为非空类型(int
)。如果score
是null
,解包时程序会抛出异常。 -
在
try-catch
语句中,catch
捕获了异常并打印了错误信息。 -
当
score
被赋值为100
后,强制解包就不会再出错,程序判断并输出"及格"
。
2. 警告:强制解包后的类型
score = 100;score!; // 这里运行会有警告,因为score已经被赋值为int类型
运行结果
没有输出,但会在编译时显示警告:
Warning: Operand of null-aware operation '!' has type 'int' which excludes null.
解释
-
score
已经被赋值为100
,它的类型变成了int
,不再是可选类型int?
。此时,再使用!
强制解包会导致编译时警告,因为score
已经是一个非空类型,!
强制解包不再适用。
3. 双问号运算符(??
)
fn2(String? str) {var str2 = str ?? "默认值";print("str2=$str2");str=“abc”;str;//这里已经变成了String//这里因为str是String所以不能用 ??去运算,会有警告Warning: Operand of null-aware operation '??' has type 'String' which excludes null.}
运行结果
-
如果传递
"abc"
给
str
,输出:
str2=abc
-
如果传递
null
给
str
,输出:
str2=默认值
解释
-
这段代码处理了
null
值的情况,当str
为null
时,提供一个默认值。 -
双冒号?? 运算符,代表,如果?? 左边是null,那么就返回右边的值,如果左边不是null,那么就返回左边的值
-
str.isEmpty;//注意可选类型不能直接使用在String的方法,需要先转化成String类型
-
var str2 = str!;//之前我们用强制解包,但是如果遇到null就会中断,需要用try catch来捕获异常
4. 使用 ?.
运算符
fn3(String? str) {var r1 = str?.isEmpty ?? false;print("r1=$r1"); }
运行结果
-
如果传递
"abc"
给
str
,输出:
r1=true
-
如果传递
null
给
str
,输出:
r1=false
解释
-
?.
运算符是可空类型的安全访问运算符。它会检查str
是否为null
,如果是null
,则直接返回null
,否则调用isEmpty
方法。 -
如果
str
是null
,r1
会被赋值为false
(通过??
提供默认值)。如果str
是非null
字符串,则调用isEmpty
方法判断字符串是否为空。
5. 综合示例:强制解包与空值判断
main() {fn1(null); fn1(100); int? i1 ;i1 > 100;var i2=i1;fn2("abc"); fn2(null); fn3("abc"); fn3(null); }
运行结果
e=NoSuchMethodError: The method '>' was called on null. 及格 str2=abc str2=默认值 r1=true r1=false
解释
-
fn1(null)
:传递null
给score
,程序会抛出异常并输出错误信息。 -
fn1(100)
:传递100
给score
,程序不会抛出异常,并输出"及格"
。 -
fn2("abc")
:传递"abc"
给str
,返回str
本身,输出"str2=abc"
。 -
fn2(null)
:传递null
给str
,返回默认值"默认值"
,输出"str2=默认值"
。 -
fn3("abc")
:传递"abc"
给str
,检查是否为空,输出r1=true
。 -
fn3(null)
:传递null
给str
,由于str
为null
,输出r1=false
。
相关文章:
Dart 3.5语法 28-29
028问号可选类型可空类型保存null空String的isEmpty和NotEmpty ?问号可选类型可空类型保存null叹号强制解包??双冒号运算符String的isEmpty和isNotEmpty ? 问号可选类型,可空类型 可选类型可以保存null,就是空的意思 String.isEmpty 是判断是否是空白字符串,他并不是null…...

利用AFE+MCU构建电池管理系统(BMS)
前言 实际BMS项目中,可能会综合考虑成本、可拓展、通信交互等,用AFE(模拟前端)MCU(微控制器)实现BMS(电池管理系统)。 希望看到这篇博客的朋友能指出错误或提供改进建议。 有纰漏…...

【教学类-89-06】20250220新年篇05——元宵节灯笼
背景需求: 每年元宵、国庆都回带孩子做灯笼。用python对"对折灯笼“的纸模进行不同图案的填充(区分物权) 【教学类-39】A4红纸-国旗灯笼纸模(庆祝中华人民共和国成立74周年)_a4 打印 灯笼-CSDN博客文章浏览阅读1…...

C++ Primer 类的静态成员
欢迎阅读我的 【CPrimer】专栏 专栏简介:本专栏主要面向C初学者,解释C的一些基本概念和基础语言特性,涉及C标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级…...
【UCB CS 61B SP24】Lecture 4 - Lists 2: SLLists学习笔记
本文内容为重写上一节课中的单链表,将其重构成更易于用户使用的链表,实现多种操作链表的方法。 1. 重构单链表SLList 在上一节课中编写的 IntList 类是裸露递归的形式,在 Java 中一般不会这么定义,因为这样用户可能需要非常了解…...

【科研绘图系列】R语言绘制小提琴图、散点图和韦恩图(violin scatter plot Venn)
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载画图1画图2画图3画图4画图5画图6画图7参考介绍 【科研绘图系列】R语言绘制小提琴图、散点图和韦恩图(violin & scatter plot & Venn) 加载R包 library…...
Linux中POSIX应用场景
Linux 提供了丰富的 POSIX(Portable Operating System Interface)标准接口,这些接口可以帮助开发者编写可移植、高效的应用程序。POSIX 标准定义了一系列系统调用和库函数,涵盖了文件操作、进程管理、线程管理、信号处理、同步机制…...

量子算法导论
重学了量子算法,不知道是温故而知新,还是之前的教材没有讲过这个概念。 如果把(图灵机)计算机比作一个查询机器,输入x通过f(x)作用得出结果,而查询的过程就是计算的过程。 中文解释…...
nasm - BasicWindow_64
文章目录 nasm - BasicWindow_64概述笔记my_build.batnasm_main.asmEND nasm - BasicWindow_64 概述 学习网上找到的demo. x64和x86的汇编源码还差挺多的。 x64的汇编代码不好写,细节整不对,程序就不运行。 如果要查为啥不运行,也要看和正向…...

SpringBoot:SSL证书部署+SpringBoot实现HTTPS安全访问
一、前言 SSL协议介于TCP/IP协议栈的第四层(传输层)和第七层(应用层)之间,为基于TCP的应用层协议(如HTTP)提供安全连接。它通过在客户端和服务器之间建立一个加密的通道,确保数据在传…...

selenium爬取苏宁易购平台某产品的评论
目录 selenium的介绍 1、 selenium是什么? 2、selenium的工作原理 3、如何使用selenium? webdriver浏览器驱动设置 关键步骤 代码 运行结果 注意事项 selenium的介绍 1、 selenium是什么? 用于Web应用程序测试的工具。可以驱动浏览…...
Spark提交任务
1、Spark提交任务到Yarn 1.1、DwKuduApp spark-submit --class com.io.etl.dwkudu.DwKuduApp \ --files /etl/etl-dwkudu/conf/doris.property,/etl/etl-dwkudu/conf/redis.property,/etl/etl-dwkudu/conf/log4j.property \ --master yarn --deploy-mode cluster \ --driver-…...

游戏引擎学习第113天
仓库:https://gitee.com/mrxiao_com/2d_game_2 黑板:优化的基本过程 在游戏编程中,优化是一个非常重要的学习内容,尤其是想要成为专业开发者时。优化的核心是理解代码的执行速度,以及如何提升其性能。在这个阶段,已经…...
token是什么
在自然语言处理(NLP)和机器学习的背景下,token 是指模型在处理文本时的最小单位。通常,这个单位可以是单词、字符,或者词的一部分。具体来说,token 的定义取决于你使用的模型和它的分词方式。 举个例子&am…...

23. AI-大语言模型-DeepSeek赋能开发-Spring AI集成
文章目录 前言一、Spring AI 集成 DeepSeek1. 开发AI程序2. DeepSeek 大模型3. 集成 DeepSeek 大模型1. 接入前准备2. 引入依赖3. 工程配置4. 调用示例5. 小结 4. 集成第三方平台(已集成 DeepSeek 大模型)1. 接入前准备2. POM依赖3. 工程配置4. 调用示例…...
IPv6报头40字节具体怎么分配的?
目录 IPv6报头结构 字段详解 示例代码:IPv6报头的Python实现 输出示例 IPv6协议是为了解决IPv4地址耗尽问题而设计的下一代互联网协议。与IPv4相比,IPv6不仅提供了更大的地址空间,还简化了报头结构,提高了网络设备的处理效率。…...

驱动开发、移植
一、任务明确:把创龙MX8的驱动 按照我们的要求 然后移植到 我们的板子 1.Linux系统启动卡制作, sd卡 先按照 《用户手册—3-2-Linux系统启动卡制作及系统固化》 把创龙的Linux系统刷进去。 2. 把TLIMX8-EVM的板子过一遍 把刚刚烧好系统的sd卡插入 创…...

BFS与Flood Fill:算法原理、实现细节与复杂度分析
目录 1. 概述 2. BFS 的基本原理 3. Flood Fill 算法 4. BFS 实现 Flood Fill 的步骤 5. C 实现 6. 代码解析 7. 复杂度分析 8. 应用场景 总结 1. 概述 Flood Fill 算法是一种用于填充封闭区域的算法,常用于图像处理、绘图工具和游戏开发中。BFS(…...

计算机网络基础杂谈(局域网、ip、子网掩码、网关、DNS)
目录 1. 简单局域网的构成 2. IP 地址 3. 子网掩码 4. IP地址详解自定义IP 5. IP 地址详解 6. 网关 7. DNS 域名解析 8. ping 1. 简单局域网的构成 交换机是组建局域网最重要的设备,换句话说,没有交换机就没法搭建局域网 交换机不能让局域网连…...

雷龙CS SD NAND(贴片式TF卡)测评体验
一、产品概述 近期获赠雷龙科技(Longsto)推出的CS系列贴片式SD NAND存储解决方案,包含两片工业级贴片式NAND芯片(CSNP16GCR01-AOW)及全兼容转接板。该方案支持TF卡形态扩展,实现高可靠性嵌入式存储应用。 …...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...

对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...

【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...

微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...

论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...

并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...