【Kotlin】空安全 ④ ( 手动空安全管理 | 空合并操作符 ?: | 空合并操作符与 let 函数结合使用 )

news/2025/1/11 7:14:18/

在这里插入图片描述

文章目录

  • 一、空合并操作符 ?:
  • 二、空合并操作符与 let 函数结合使用





一、空合并操作符 ?:



空合并操作符 ?: 用法 :

表达式 A ?: 表达式 B

如果 表达式 A 的值 不为 null , 则 整个表达式的值 就是 表达式 A 的值 ;

如果 表达式 A 的值 为 null , 则 整个表达式的值 就是 表达式 B 的值 ;


代码示例 : 在下面的代码中 ,

name 变量 被声明为 String? 可空类型的变量 , 为其赋值为 null ,

使用 name ?: "name 变量为空" 代码 , 其效果如下 :

空合并操作符 左侧的 name 表达式如果为 null , 则 取 右边的 表达式 作为该表达式最终的值 ,

如果 左侧的 name 表达式 不为 null , 则 取 该 name 变量作为 该表达式最终的值 ;

因此 , 第一次使用 name ?: "name 变量为空" 代码时 , name 为空 , 整个表达式 name ?: "name 变量为空" 返回的是 "name 变量为空" 值 , 打印出来的就是 name 变量为空 内容 ;

之后 为 name 变量赋值 "Tom" 字符串值 , 现在 name 变量不为空 , 使用 name ?: "name 变量为空" 代码返回的是 name 变量的值 , 因此打印出来的就是 Tom 内容 ;

fun main() {var name: String? = nullprintln(name ?: "name 变量为空")name = "Tom"println(name ?: "name 变量为空")
}

执行结果 :

name 变量为空
Tom

在这里插入图片描述





二、空合并操作符与 let 函数结合使用



空合并操作符 ?:let 函数 结合使用 , 可以 替代 if .. else .. 语句 ;


代码示例 :

fun main() {var name: String? = nullname = "tom"name = name?.let {it.capitalize()} ?: "Jerry"println(name)
}

执行结果 :

Tom

在这里插入图片描述


如果 name 变量为 null , 则 ?: 表达式中 , 会选择 ?: 后面的表达式作为最终结果 ;

对应代码如下 :

fun main() {var name: String? = nullname = name?.let {it.capitalize()} ?: "Jerry"println(name)
}

执行结果 :

Jerry

在这里插入图片描述


http://www.ppmy.cn/news/10443.html

相关文章

华为OD机试 - 微服务的集成测试

题目描述 现在有n个容器服务,服务的启动可能有一定的依赖性(有些服务启动没有依赖),其次服务自身启动加载会消耗一些时间。 给你一个nxn的二维矩阵useTime,其中useTime[i][i]=10表示服务i自身启动加载需要消耗10s, useTime[i][j] = 1表示服务i启动依赖服务j启动完成,us…

剑指 Offer 56 - I. 数组中数字出现的次数

题目要求时间复杂度是O(n),空间复杂度是O(1)。 异或可以将两个只出现一次的数筛选出来,之后再把这两个数分到两组中,并且将相同的数分到同一组,两组分别异或就能求出两个数。 异或规则是不相同为1,相同为0 所以利用a^…

vitepress(三):自动生成目录

上一节我们将自己的网站发布到了git pages上,但是现在我们需要每次更新一篇文章就重写一次目录,操作上十分的繁琐和不方便,所以我们需要一个方法去自动生成我们的侧边栏结构,方便我们每次只需要更新我们的项目即可。这里我们要知道…

机器学习(4)——周志华

归纳偏好 若非必要,勿增实体 若多个算法都能解决同一个问题,则选取最简单的算法 当前什么样的偏好与问题更匹配,必须对问题有一个清楚的认识

WSL2下安装MESA / OSMESA驱动

找不到的命令可以在这里找https://command-not-found.com/ 写在最前面 如果你和我一样是在用pyrender的时候遇到了以下问题,并且在试了以下方法代码仍然报莫名其妙错误的时候,请通过pip 把pyrender pyopengl 都升到最新版,可以无视pyrender…

【AcWing周赛】AcWing第85场周赛

目录 <一>Acwing 4791. 死或生 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 <二>Acwing 4792. 最大价值 一、题目 1、原题链接 2、题目描述 二、解题报告&#xff1a; 1、思路分析 2、时间复杂度 3、代码…

【华为机试真题详解】获得完美走位【2022 Q4 | 100分】

文章目录 前言题目描述输入描述输出描述示例 1示例 2题目解析参考代码优化前言 《华为机试真题详解 Python实现》专栏含牛客网华为专栏、华为面经试题、华为OD机试真题。 如果您在准备华为的面试,期间有想了解的可以私信我,我会尽可能帮您解答,也可以给您一些建议! 本文解…

C语言-指针进阶-函数指针数组应用-计算器(9.2)

目录 1. 函数指针 2. 函数指针数组 2.1函数指针数组的定义 2.2函数指针数组应用 3. 指向函数指针数组的指针 思维导图&#xff1a; 1. 函数指针 直接上代码&#xff1a; #include <stdio.h>void test() {printf("hehe\n"); }int main() {printf("%…