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卡形态扩展,实现高可靠性嵌入式存储应用。 …...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)
一、OpenBCI_GUI 项目概述 (一)项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台,其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言,首次接触 OpenBCI 设备时,往…...
Linux中《基础IO》详细介绍
目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改,实现简单cat命令 输出信息到显示器,你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...
Python实现简单音频数据压缩与解压算法
Python实现简单音频数据压缩与解压算法 引言 在音频数据处理中,压缩算法是降低存储成本和传输效率的关键技术。Python作为一门灵活且功能强大的编程语言,提供了丰富的库和工具来实现音频数据的压缩与解压。本文将通过一个简单的音频数据压缩与解压算法…...
基于开源AI智能名片链动2 + 1模式S2B2C商城小程序的沉浸式体验营销研究
摘要:在消费市场竞争日益激烈的当下,传统体验营销方式存在诸多局限。本文聚焦开源AI智能名片链动2 1模式S2B2C商城小程序,探讨其在沉浸式体验营销中的应用。通过对比传统品鉴、工厂参观等初级体验方式,分析沉浸式体验的优势与价值…...
