带你读《深入浅出Dart》二十、空安全

简介: 带你读《深入浅出Dart》二十、空安全

二十、空安全

更强的类型系统,更少的错误

近些年来,编程语言的类型安全性已经成为软件开发社区的一个主要焦点。通过利用类型安全,开发人员可以更好地预防错误,简化代码,并提高程序的整体性能和可靠性。Dart是一个被设计为安全、可扩展和高效的现代化编程语言,近期其发布了一项重要的更新:空安全。

1.空安全是什么?

空安全是指编程语言的类型系统能够区分可为空的类型和不能为空的类型。这种区别可以防止空引用错误(Null Reference Errors),也称为 "null pointer exceptions" 或 "the billion-dollar mistake"。空引全错误是软件开发中最常见的错误之一,它们在运行时发生,常常会导致程序的崩溃或其他严重的问题。

2.Dart 的空安全

Dart 2.12 版本引入了空安全。在引入空安全之前,Dart 任何对象都可以为空。然而,这种设计虽然看起来灵活,但实际上会引起很多问题,尤其是当开发者假设某个值不会为空,但实际上它为空时。由于这样的错误通常在运行时才会被检测到,所以它们通常很难发现和修复。

 

空安全通过在类型系统级别防止这种错误的发生。Dart 的空安全类型系统区分了可空类型和非空类型。例如,String 类型的对象不能为 null,而 String? 类型的对象可以为 null。Dart 会在编译时检查代码,确保所有的非空类型的变量在使用之前都已经被初始化,并且不会被赋值为 null。

3.如何在Dart中使用空安全?

使用Dart空安全主要涉及到两个方面:理解可空和非空类型,以及如何处理可能为空的值。

可空和非空类型

在空安全中,所有类型默认都是非空的。例如,如果你声明一个 String 类型的变量,Dart会假设它永远不会为空。如果你想声明一个可以为空的 String,你需要在类型后面加上 ?,如 String?

 

String nonNullableString = 'Hello, Dart!'; // 非空类型String? nullableString = null; // 可空类型

处理可空值

当你处理一个可能为空的值时,Dart 提供了几种方式来帮助你。例如,你可以使用 ?? 操作符来提供一个默认值,当变量为空时,将会使用这个默认值。

 

String? nullableString = null;String nonNullableString = nullableString ?? 'Default String'; // 如果nullableString为null,那么将使用'Default String'

 

另外,Dart 也提供了 ?. 操作符,允许你在对象为空时跳过方法调用或属性访问,避免抛出空引用错误。

String? nullableString = null;
int? length = nullableString?.length; // 如果nullableString为null,那么length也将为null

4.结论

Dart 的空安全特性为开发者提供了一个强大的工具,可以在编译时就捕获和修复可能的空引用错误。

 

相关文章
|
异构计算
单卡可推理CodeFuse-CodeLlama-34B 4bits量化版本魔搭开源!
继2023-09-11 CodeFuse-CodeLlama-34B发布,HumanEval pass@1指标达到74.4% (贪婪解码), 为当前开源SOTA。最近,CodeFuse-CodeLlama-34B 4bits量化版本发布,CodeFuse-CodeLlama-34B-4bits是CodeFuse-CodeLlama-34B模型的4bits量化版本,后者是通过QLoRA对基座模型CodeLlama-34b-Python进行多代码任务微调而得到的代码大模型,模型输入长度为4K。
|
Java 数据库连接 数据库
【MyBatisPlus 实现文件的上传和下载 超详细....】
【MyBatisPlus 实现文件的上传和下载 超详细....】
539 0
|
消息中间件 Ubuntu Kafka
体验阿里云Windows Server 2019+docker
在Windows上使用docker部署部分服务。但在使用过程中,发现这个阿里云服务器跟物理机服务器还是略有区别的。最后使用微软提供了Windows Server 2019上使用powershell命令行安装docker的步骤成功安装部署了docker。
3772 0
|
2月前
|
安全 Java API
Java SE 与 Java EE 区别解析及应用场景对比
在Java编程世界中,Java SE(Java Standard Edition)和Java EE(Java Enterprise Edition)是两个重要的平台版本,它们各自有着独特的定位和应用场景。理解它们之间的差异,对于开发者选择合适的技术栈进行项目开发至关重要。
289 1
|
存储 缓存 监控
|
9月前
|
机器学习/深度学习 数据采集 人工智能
量子计算与人工智能的结合:引领科技革命的前沿
量子计算与人工智能的结合:引领科技革命的前沿
524 13
|
资源调度 JavaScript API
vue-element-admin 综合开发五:引入 echarts,封装echarts 组件
这篇文章介绍了如何在vue-element-admin项目中引入并封装ECharts组件,以及如何实现折线图、柱状图和饼图的展示。
1243 4
vue-element-admin 综合开发五:引入 echarts,封装echarts 组件
|
11月前
|
开发工具 git
如果使用git产生了冲突,你是怎么解决的?
在团队开发中,若多人同时修改同一代码位置,拉取时可能会产生冲突。解决冲突需及时与同事沟通确认问题,并使用IDEA等工具进行版本对比,选择合适代码保留。解决步骤包括:查看冲突文件、删除多余代码及标记、使用git add标记冲突已解决、最后git commit提交修改,必要时git push推送更改。
238 6
|
监控 关系型数据库 MySQL
MySQL装机实战指南:从零开始构建高效数据库环境
通过本文的指南,您应该已经成功安装了MySQL,并对其进行了基本的配置和优化。MySQL是一个功能强大、灵活的数据库管理系统,通过不断的学习和实践,您将能够充分利用其潜力来满足您的业务需求。记住,定期备份数据库、更新软件以及进行性能监控是保持数据库环境健康和高效的关键。希望本文能对您有所帮助!
387 2
|
存储 安全 大数据
大数据确定删除标准
【10月更文挑战第24天】
340 6