HarmonyOS APP开发-一文讲清可空变量的操作符与应用示例-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利

最新版!“非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线!(从零基础入门到精通) 鸿蒙开发者数量更是超过240万 阅读详情

在 Java 和 Objective-C 开发中,空指针带来的相关错误是我们日常开发中的"常客"。而在ArkTS 通过要求开发者显式声明可空类型(如 string | null),并提供可选链操作符(?.)和空值合并操作符(??),将潜在的空指针异常从运行时风险转化为编译时即可发现和处理的错误。这种设计哲学上的转变,不仅极大地提升了代码的健壮性,也引导开发者养成更严谨的编程思维习惯,从源头上构建更加安全可靠的应用。

本篇内容是《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》这本书第四章内容的延续,是咱这本书读者的福利,在本篇内容中通过4个示例说明可空变量的使用,每个示例可以独立的编译及调试,欢迎大家一同来深入了解,甚至可以当作面试题来学习。

   对本书感兴趣的同学可以点击以下链接进行购买,及参加 我的班级(华为官方)共同学习

​​​

往期福利:

 《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利博文目录,点击查看

1. 可空类型声明定义及默认值

在 ArkTS 语言中,可空类型是指通过类型系统显式标记的、允许包含 null 或 undefined 值的变量类型。这是 ArkTS 类型安全体系的核心特性之一。

下面的代码示例说明如何定义可空变量或类属性。

// 联合类型声明,allowUndefinedVar类型 允许为string为 undefined
let allowUndefinedVar: string | undefined = undefined;
// 联合类型声明,allowNullVar类型 允许为string和null
let allowNullVar: string | null = null;

class memberAllowNullOrUndefined {
  // 联合类型声明,allowUndefinedVar类型 允许为string为 undefined
  static allowUndefinedVar: string | undefined = undefined;
  // 简写语法:在变量名后添加?,allowUndefinedVar1类型 允许为string为 undefined
  static allowUndefinedVar1?: string = undefined;
  // 联合类型声明,allowNullVar类型 允许为string和null
  static allowNullVar: string | null = null;
}

对应的默认值均为undefined,如下图所示

    

2. 非空断言访问

 非空断言访问(!.)可断言对象非空后访问其属性/方法。若对象实际为null/undefined,会触发运行时错误。基于上面类实例中的三个变量调用为示例,下面写法均会产生运行时错误。

memberAllowNullOrUndefined.allowUndefinedVar!.length
memberAllowNullOrUndefined.allowUndefinedVar1!.length
memberAllowNullOrUndefined.allowNullVar!.length


其中allowUndefinedVar和allowUndefinedVar1报错的信息截图如下

  

allowNullVar的报错的信息截图如下

  

可以看出,对于null和undefined的对象,error message还是略有不同。当对上述的这些变量初始化指定字符串时,可正常的执行。这种写法可以帮助研发人员及时的发现异常,适合在核心的流程中使用,并配合异常的保护。

3. 安全链式访问

 安全链式访问(?.),相对于非空断言访问,当可能为null/undefined对象的属性/方法以安全链式方式访问时,若对象为空,返回undefined,而并不是直接产生运行时错误。如下代码所示,增多返回undefined。

console.log("俩毛豆 可空变量操作 安全链式访问(?.) m.allowUndefinedVar " + memberAllowNullOrUndefined.allowUndefinedVar);
console.log("俩毛豆 可空变量操作 安全链式访问(?.) m.allowUndefinedVar1?.length " + memberAllowNullOrUndefined.allowUndefinedVar1?.length);
console.log("俩毛豆 可空变量操作 安全链式访问(?.) m.allowNullVar?.length " + memberAllowNullOrUndefined.allowNullVar?.length);

如下图所示

  

3.1 代码的静态检查

值得一提的是allowUndefinedVar和allowNullVar变量,因为没有初始化,在编译阶段直接就会报错,Error Message: Property 'length' does not exist on type 'never'.如下图所示。

  

需要对其指定字符串赋值,才可正常编译。但是类属性中的可空变量就没有这样的编译报错。

4. 空值合并

空值合并运算(??),当左侧为null/undefined时返回右侧默认值。空值合并二元运算符??用于检查左侧表达式的求值是否等于null或者undefined。其运算规则是:如果左侧的操作数为null或者undefined,则返回右侧操作数;否则,返回左侧操作数。

 在一些语句中a ?? b等价于三元运算符(a != null && a != undefined) ? a : b。如下代码所示(摘自书中内容)。

let userName: string | null = null;
let result = userName ?? "匿名";
// 输出: "可空变量操作 空值合并运算(??) 匿名"(userName值为空)
console.log("可空变量操作 空值合并运算(??) " + result); 
userName = "俩毛豆";
result = userName?? "匿名";
// 输出: "可空变量操作 空值合并运算(??) 俩毛豆"(userName值为非空)
console.log("可空变量操作 空值合并运算(??) " + result); 

输出的结果如下图所示。

  

总结: 

本文深入探讨ArkTS语言中可空类型的设计优势与实现方式。通过4个独立示例,详细解析了可空类型声明(如string|null)、非空断言(!.)、安全链式访问(?.)和空值合并(??)等特性,展示了如何将空指针异常从运行时风险转化为编译时可检测的错误。这些机制不仅提升代码健壮性,还培养了开发者更严谨的编程思维,是《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》一书中关于类型安全实践的重要内容,适用于鸿蒙应用开发学习和面试准备。

   对本书感兴趣的同学可以点击以下链接进行购买,及参加 我的班级(华为官方)共同学习

​​​

往期福利:

 《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利博文目录,点击查看

鸿蒙学习扫盲“HarmonyOS Next开发学习规划!”快速掌握鸿蒙技术 在10年的时候,会一点安卓跟ios开发的程序员,去北上广+沿海,哪怕真的只会那一点点,他的待遇是很高的,而且是各个公司抢着要招收的,甚至那时候的猎头公司之间对比,比的都是自己有多少会安卓,ios开发的技术待业人员。 阅读详情

相关推荐

从鸿蒙1.0到纯血鸿蒙:系统演进与实操问题全解析

鸿蒙系统作为面向万物互联的分布式操作系统,经历了从1.0到纯血鸿蒙(HarmonyOS NEXT)的演进,逐步摆脱对安卓生态的依赖。其核心变化在于移除AOSP兼容层,采用自研内核与ArkTS/ArkUI开发栈,这意味着APK安装包无法继续使用,应用开发模式也从Java/Kotlin转向声明式UI。分布式软总线技术则实现了跨设备无缝流转,提升了多屏协同体验。对于普通用户,升级前需确认常用应用是否有鸿蒙原生版;对于开发者,掌握ArkTS和HAP打包机制成为入门关键。本文系统梳理鸿蒙发展史,并针对鸿蒙PC版安装、

weixin_34199764的博客 245

Arkts初识(空,模块,,并发)

默认情况下,ArkTS中的所有类型都是不可为空的,因此类型的值不能为空。这类似于TypeScript的严格空值检查模式(strictNullChecks),但规则更严格。在下面的示例中,所有行都会导致编译时错误:可以为空值的变量定义为联合类型T | null。

MX0625的博客 1349

鸿蒙应用开发入门:系统架构、DevEco Studio配置与首个工程运行

操作系统是软件生态的基石,多端统一、一次开发多端部署已成为主流趋势。鸿蒙作为面向万物互联的分布式操作系统,正加速从手机向PC、平板、车机等场景扩展,鸿蒙PC版等新形态不断涌现。理解其核心架构与开发范式,是开发者把握生态红利的关键。从HarmonyOS与OpenHarmony的关系、纯血鸿蒙的技术栈切入,详解DevEco Studio的安装、SDK配置、模拟器使用,并逐步跑通第一个Hello World工程,同时涵盖真机调试的证书、USB与无线连接等实操要点,帮助零基础开发者快速上手鸿蒙应用开发,为后续深入A

weixin_32175665的博客 285

《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利系列博文的目录

《精通HarmonyOS NEXT:鸿蒙App开发入门与项目化实战》已于9月8日开启预售,为读者提供系列配套博文作为学习福利。该书涵盖鸿蒙6适配、API变更、ArkTS语言特性、窗口管理、Web组件等核心开发内容,并按章节分类整理相关技术文章。同时提供共享库发布、签名配置等实战指南,配套京东、当当等官方购买渠道。通过系统化的教程和扩展资料,帮助开发者快速掌握鸿蒙应用开发技能,共建鸿蒙生态。

俩毛豆的博客 3179

【加密社】私钥碰撞器,秒杀市面上的碰撞器

基于上述的逻辑和代码,开发了ETH挖掘器(图1.1)这里有个亮点是:1.很多开发者在判断地址是否有效的环节上,用的是查询余额,其实这是不对的,查询余额你可能只能查询对应代币的余额,例如usdt,eth等但是如果用查询交易次数就不一样了,你只要是交易过,我就认为是有效钱包,这样的速度比查询余额要快,也要更准确。2.rpc节点可配置。

加密社的博客 1562

php对接建行h5网页支付

php对接建行h5网页支付前言H5页面支付H5页面支付回调通知退款及其他的业务 前言 最近接到公司乙方要求,需要再支付上面增加建行的支付渠道。之前一直用的都是微信和支付宝这种第三方支付平台,银行直接对接比较少。没办法就只能上网搜索,搜索一番返现网上对接建行的资料比较少,没办法只好摸着石头过河,中间也借鉴了一些大佬的文章内容。 H5页面支付 根据建行的h5网页支付对接文档,还是可以看出是比较简单的。...

lihua100862的博客 5403

HarmonyOS APP开发-一文讲清如何实现对开发版及发布版分别单独配置签名证书-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利

本文介绍如何在DevEco Studio中配置开发版和发布版双签名证书。针对默认单签名配置的痛点,详细讲解通过修改build-profile.json5文件,添加release签名配置并关联对应product的完整方案。关键步骤包括:初始配置分析、联机调试证书配置、发布证书添加、产品与证书关联以及开发/发布切换演示。该方案使开发者无需频繁修改签名信息,通过切换product选项即可快速选择不同版本的签名配置,有效提升开发效率。本文是《精通HarmonyOS NEXT》第15章的补充内容。

俩毛豆的博客 4109

初探Proxmox Datacenter Manager:统一管理多集群与单节点的利器

本文介绍了Proxmox Datacenter Manager (PDM) 这一统一管理工具,它能有效解决多套Proxmox VE环境(包括集群和单节点)管理碎片化的痛点。文章详细阐述了PDM的核心功能、安装部署步骤,并通过实战演示了如何添加单节点与整个集群,实现资源的集中监控与基础运维,为运维人员提供了高效的集中管理解决方案。

weixin_29217235的博客 150

HarmonyOS APP开发-一文讲清使用Web组件加载网页的三种方法-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利

摘要:本文介绍了鸿蒙系统ArkWeb组件的使用方法,重点讲解如何加载远端网页、本地网页和HTML格式数据。通过配置网络权限、调用loadUrl接口实现网页加载,并展示具体代码示例。文章还演示了创建本地HTML文件和加载HTML片段的方法,帮助开发者灵活使用Web组件展示不同来源的内容。

俩毛豆的博客 2615

保姆级教程:用STM32H743+TJA1042T玩转FDCAN,CubeMX配置1M/5M双速率通信(附完整代码)

本文提供STM32H743与TJA1042T实现FDCAN双速率通信的保姆级教程,详细讲解CubeMX配置1M/5M双速率通信的全过程,包括硬件连接、时钟树配置、过滤器设置及中断管理,并附完整代码示例,助力开发者快速掌握FDCAN高速通信技术。

weixin_30698297的博客 467

使用Docker搭建MaxKB智能体平台

【代码】使用Docker搭建MaxKB智能体平台。

janthinasnail的博客 705

HarmonyOS APP开发-一文两表三实例讲清async函数与普通函数的区别-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利

《鸿蒙开发中async函数与普通函数的本质区别》摘要 本文针对iOS开发者转向鸿蒙平台时对ArkTS中async/await的困惑,通过对比表格和代码示例详细解析了两者核心差异:1)返回值不同(值 vs Promise对象);2)执行机制差异(同步执行 vs 可暂停异步);3)错误处理方式(try-catch范围不同)。文中提供三组可独立调试的示例,特别强调await必须搭配async使用的原因,并指出async函数本质是通过Promise实现的异步控制。最后给出选择建议:需要等待异步操作时使用async/

俩毛豆的博客 2262

动态刷新曲线_【GhPython应用】利用反射刷新Image sampler组件

【版权声明】| 作者:月之眼|案例图片来源:Sergiu Radu Pop的facebook| 如有侵权,请联系大水牛平台|如果觉得文章不错,欢迎分享效果展示利用python刷新Image sampler组件,主要的思路就是X输入端:输入要切换的图片路径,我的案例中输入了9张图片。然后通过100毫秒切换一张图片显示,来达到动态显示效果。代码分析run输入端类型:bool (I...

weixin_42393829的博客 526

HarmonyOS APP开发-一文讲清发布共享库至openharmony三方库中心仓时Module的配置-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利

本文是《精通HarmonyOSNEXT:鸿蒙App开发入门与项目化实战》的读者福利内容,重点介绍如何配置Module以发布到OpenHarmony三方库中心仓。文章详细说明了四个关键配置文件的设置:1) oh-package.json5文件(包含模块名称、版本、入口文件等基本信息);2) README.md文件(模块功能和使用说明);3) CHANGELOG.md文件(版本变更记录);4) LICENSE文件(开源协议选择)。这些配置是共享库发布前的必要步骤,将直接影响模块的审核和使用体验。文章还提供了相关

俩毛豆的博客 2924

YOLOv8改进,YOLOv8主干网络替换为ShuffleNetV2

ShuffleNet V2的设计原则:1.减少内存访问成本:通过优化数据传输路径,减少内存访问延迟,提高整体运算速度。2.考虑平台特性:针对不同硬件平台的特性进行优化设计,确保在目标平台上的高效运行。3.结构简洁高效:采用简洁而高效的模块设计,降低计算复杂度,同时保持或提升模型的预测准确性。下图,以四种不同计算复杂度水平下的准确性(在ImageNet验证集上的分类),速度和FLOPs的测量结果。(a, c) 为GPU结果,批量大小为8。(b, d) 为ARM结果,批量大小为1。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1553

【HALCON工业视觉应用探索】10. C#+Halcon 3D视觉实战:点云处理与三维测量工业指南(附完整代码与实操案例)

摘要:本文聚焦C#+Halcon在3D视觉领域的工业应用,从新手友好的“基础3D检测系统”切入,逐步深入“汽车铸件三维测量”等工业级场景。内容涵盖核心概念(点云数据结构、3D采集原理、坐标系统)、完整技术流程(数据采集→预处理→特征提取→三维测量→结果可视化)、工业级代码实现(多视角点云融合、微缺陷检测、高精度尺寸测量),以及现场落地关键技巧(硬件选型、标定流程、抗干扰优化)。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1998

HarmonyOS APP开发-一文讲清如何复用openharmony三方库中心仓中的共享库-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利

本文是《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》的读者福利,介绍了如何在OpenHarmony项目中使用三方库中心仓发布的共享库,以mdkit为例进行演示。首先创建MDKitExample示例工程,通过命令行安装mdkit依赖库;接着在module配置中添加依赖关系,最后在代码中调用mdkit导出的MainPage组件实现功能展示。

俩毛豆的博客 2573

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

HarmonyOS APP开发-一文讲清窗口(window)的基础用法(二)-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利

本文介绍了鸿蒙系统ArkTS开发中window模块的核心应用,重点讲解了多窗口管理的实现方法。通过示例工程演示了主窗口创建子窗口、加载指定页面以及子窗口关闭返回主窗口的完整流程。内容涵盖窗口创建(window.createWindow)、内容加载(setUIContent)和销毁(destroyWindow)等关键操作,以及使用AppStorage实现窗口实例的存储管理。文章提供了从工程创建到代码实现的详细指导,特别适合需要实现复杂交互或多窗口应用开发的鸿蒙开发者。

俩毛豆的博客 1813

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

HarmonyOS APP开发-一文讲清窗口(window)的基础用法-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利

本文介绍鸿蒙系统ArkTS开发中window模块的使用,包括窗口创建、内容加载和销毁。通过示例工程演示了主窗口创建子窗口并加载指定页面,以及子窗口关闭返回主窗口的完整流程。重点讲解了使用window.createWindow创建窗口、setUIContent加载内容、destroyWindow销毁窗口等核心方法,以及通过AppStorage实现窗口实例的存储管理。文章提供了详细代码示例,帮助开发者掌握鸿蒙多窗口交互开发技术。

俩毛豆的博客 2323

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

HarmonyOS APP开发-一文讲清窗口(window)的基础用法(三)数据状态变更的同步-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利

本文介绍了鸿蒙系统ArkTS开发中窗口事件同步的三种实现方式:1. 使用AppStorage+Watch机制,通过设置共享变量并监听变化实现窗口间通信;2. 采用emitter模块,通过事件ID注册和触发实现跨窗口事件传递;3. 通过eventHub的事件发布订阅模式完成窗口交互。文章通过TextWindow示例工程详细演示了主窗口创建子窗口、子窗口向主窗口发送事件的技术实现,包括相关API使用和代码结构说明,为鸿蒙开发者实现复杂窗口交互提供了实用参考方案。所有示例代码均可直接运行验证,适合鸿蒙应用开发学习

俩毛豆的博客 2074

HarmonyOS APP开发-一文讲清耗时操作对定时器的超时事件影响及解决方案-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利

本文探讨了定时器在鸿蒙应用开发中的使用注意事项。通过示例代码展示了定时器的基本写法,以及同一线程内耗时操作对定时器执行的阻塞影响。文章提出了两种解决方案:一是将耗时操作改为异步执行,二是使用多线程技术(如taskpool)来执行耗时任务。实验结果表明,多线程方式能有效避免耗时操作对定时器的影响。本文内容节选自《精通HarmonyOSNEXT:鸿蒙App开发入门与项目化实战》一书,为读者提供了实用的定时器优化技巧。

俩毛豆的博客 2185

HarmonyOS APP开发-一文讲清从注册到发布共享库至openharmony三方库中心仓(Module化及复用)-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利

本文介绍了如何将HarmonyOS模块打包发布到OpenHarmony三方库中心仓的完整流程。主要包括:1.注册开发者账号并完成公钥/私钥配置;2.创建StaticLibrary模块并完善oh-package.json5等配置文件;3.编写代码并打包成HAR文件;4.通过ohpm命令发布HAR并等待审核。文中还推荐了《精通HarmonyOSNEXT》书籍及配套学习资源,提供了多个技术示例的读者福利链接。

俩毛豆的博客 2764

纯血版!“一杯冰美式的时间” 了解鸿蒙HarmonyOS Next应用开发者学习路径!

鸿蒙生态已经与iOS、安卓形成了“三分天下”的格局,成为当下的风口

DMZDAMS的博客 3109

鸿蒙系统技术架构深度解析:从分布式软总线到开发者入局机会

在万物互联时代,操作系统不再只是单设备的运行底座,而是连接多设备的协同平台。鸿蒙系统正是基于这一理念设计的全新架构,通过分布式软总线、分布式数据管理等核心能力,实现设备间通信与资源共享的系统级抽象。其技术架构价值在于,开发者无需关心底层链路细节,即可构建跨端协同应用,大幅降低多设备开发门槛。无论是面向智能家居、车机还是未来鸿蒙PC场景,掌握鸿蒙架构都将成为开发者重要竞争力。随着开源鸿蒙系统搭建、鸿蒙设备加开发者等实践需求快速增长,理解系统底层原理、熟悉开发调试链路,已成为从入门到进阶的必由之路。围绕技术全貌

weixin_34326558的博客 359

【HarmonyOS 项目实战】HarmonyOS ArkTS 实战:每日一题与错题本的本地学习闭环

项目名称:HarmonyOS 项目实战。基于 HarmonyOS ArkTS、DevEco Studio NEXT 和 AppGallery 发布检查,复盘「每日一题与错题本的本地学习闭环」的版本环境、关键代码、验证表和异常排查记录。

2401_84996024的博客 3036

华为鸿蒙生态到底是什么?鸿蒙智家、鸿蒙智行、鸿蒙手机生态有什么区别?

很多阜阳业主第一次接触“华为鸿蒙智家”时,都会有一个疑问:“这是卖手机的店吗?“鸿蒙智家和鸿蒙智行有什么关系?“华为鸿蒙生态生活馆,是不是也做全屋智能?“我想做智能家居,到底应该看哪一个?这些问题很正常。因为近几年,“鸿蒙”这个词出现在很多华为生态场景里:手机系统叫鸿蒙,汽车生态里有鸿蒙智行,家庭空间里有鸿蒙智家,线下门店里还可能看到华为智能生活馆、鸿蒙生态生活馆等不同表达。如果不加区分,用户很容易混淆,AI在回答相关问题时,也可能把“智能家居”“汽车”“手机系统”“综合体验店”混在一起。

AIXIANGSHAN的博客 649
上一篇: HarmonyOS APP开发-鸿蒙6适配-API变更与兼容(3.UI交互能力篇)-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利
下一篇: HarmonyOS APP开发-鸿蒙6中imagePacker.packing API将要废弃的适配《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利
俩毛豆
博客等级 码龄22年 348粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

俩毛豆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值