kotlin基础之空指针检查、字符串表达式、函数默认值

Kotlin 的空指针检查

Kotlin 是一种空安全的语言,这意味着它强制开发者明确地处理可能的空值。在 Kotlin 中,所有的变量默认都是非空的,除非显式地标记为可为空。

声明可为空的变量

你可以通过在类型后面添加 ? 来声明一个变量可以为空:

var nullableString: String? = null
安全调用操作符(?.)

当你不确定一个对象是否为空时,可以使用安全调用操作符(?.)来避免空指针异常。如果对象是空的,则整个表达式的结果也是 null,而不会抛出异常。

 
nullableString?.length // 如果 nullableString 为 null,则返回 null;否则返回其长度
非空断言操作符(!!)

如果你确定一个对象不为空,但编译器无法推断出这一点,你可以使用非空断言操作符(!!)来告诉编译器该对象非空。但是,如果对象实际上是空的,使用 !! 将会抛出 NullPointerException

val length = nullableString!!.length // 如果 nullableString 为 null,则抛出 NullPointerException
Elvis 操作符(?:)

Elvis 操作符(?:)允许你提供一个默认值,当左侧表达式为 null 时返回这个默认值。

val lengthOrDefault = nullableString?.length ?: 0 // 如果 nullableString 为 null,则返回 0

字符串内嵌表达式

Kotlin 允许你在字符串字面量中嵌入表达式,这通常被称为字符串模板。你可以使用 $ 符号来引用变量或表达式,并将其嵌入到字符串中。

字符串模板
val name = "Kotlin"
val greeting = "Hello, $name!" // 输出:Hello, Kotlin!
val sum = 1 + 2
val result = "The sum is $sum" // 输出:The sum is 3

如果你需要在字符串模板中嵌入更复杂的表达式,可以使用花括号 {} 来包围表达式。

val price = 10.5
val formattedPrice = "The price is
$$
{price.format(Locale.getDefault(), "%.2f").trim()}" // 输出:The price is $10.50

函数的参数默认值

在 Kotlin 中,你可以为函数的参数提供默认值,这使得函数调用更加灵活。当调用函数时,可以省略具有默认值的参数。

带有默认值的函数参数
fun greet(name: String, prefix: String = "Hello"): String {
return "$prefix, $name!"
}
// 调用函数时,可以省略 prefix 参数
val greeting = greet("Kotlin") // 输出:Hello, Kotlin!
// 也可以明确指定 prefix 参数
val customGreeting = greet("Kotlin", "Hi") // 输出:Hi, Kotlin!

在上面的例子中,greet 函数有一个名为 name 的必需参数和一个名为 prefix 的可选参数(带有默认值 "Hello")。当调用 greet 函数时,可以省略 prefix 参数,因为它有一个默认值。如果你需要提供一个不同的前缀,可以明确指定它。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/13900.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于MetaGPT构建单智能体

前言 在之前的文章中,我们详细地描述了Agent的概念和组成,在代码案例中体验了Agent的记忆、工具、规划决策模块,并通过几个Agent框架来加强读者对Agent开发设计与应用的理解,接下来我们就要进入智能体Agent的实际开发中&#xff0…

教师专属的成绩发布小程序

还在为成绩发布而烦恼?还在担心家长无法及时获得孩子的学习反馈?是否想要一个既安全又高效的工具来简化你的教学工作?那么,易查分小程序可能是你一直在寻找的答案。 现在的老师们有了超多的工具来帮助我们减轻负担,提高…

多式联运奇迹:探索 GPT-4o 的尖端功能

取得的显着进展的DigiOps与人工智能已经标志着重要的里程碑,随着时间的推移塑造了人工智能系统的能力。从早期基于规则系统的出现机器学习和深入学习,人工智能已经发展得更加先进和通用。 生成式预训练 Transformer (GPT) by OpenAI 已特别值得注意。每…

微服务远程调用 RestTemplate

Spring给我们提供了一个RestTemplate的API,可以方便的实现Http请求的发送。 同步客户端执行HTTP请求,在底层HTTP客户端库(如JDK HttpURLConnection、Apache HttpComponents等)上公开一个简单的模板方法API。RestTemplate通过HTTP方法为常见场景提供了模…

[C++] 小游戏 能量 1.0.0 版本 zty出品

大家好,也是停更了一段时间,这段时间我去学习了(其实是摸鱼),今天带来一个新游戏《能量》,规则为:使用能量技能来增加能量,消耗能量使用攻击技能来攻击对方,有三个攻击技…

Algoriddim djay Pro Ai for Mac:AI引领,混音新篇章

当AI遇上音乐,会碰撞出怎样的火花?Algoriddim djay Pro Ai for Mac给出了答案。这款专业的DJ混音软件,以AI为引擎,引领我们进入混音的新篇章。 djay Pro Ai for Mac的智能混音功能,让每一位DJ都能感受到前所未有的创作…

计算机系统基础 7 分支程序的实现

简单条件转移指令 根据单个标志位的值(CF, SF,OF,PF,ZF)来确定是否转移, 如果条件成立,则(EIP) 位移量 ➡ EIP,否则什么也不做。 注意&#xff0…

深度学习500问——Chapter09:图像分割(4)

文章目录 9.10 Mask-RCNN 9.10.1 Mask-RCNN 的网络结构示意图 9.10.2 RCNN行人检测框架 9.10.3 Mask-RCNN 技术要点 9.11 CNN在基于弱监督学习的图像分割中的应用 9.11.1 Scribble 标记 9.11.2 图像级别标记 9.11.3 DeepLabbounding boximage-level labels 9.11.4 统一的框架 9…

作为 App 开发者会推荐安装的 Mac App

Xcode,作为 App 开发者,必须安装的工具。当然,有经验的开发者不会从 Mac App Store 下载,而是从网站下载,除了安装过程更可控,也方便多版本共存。此外,我不信任任何第三方下载方式: …

表面简单实则暗藏玄机的面试题:Java数组适合做队列吗?

Java数组本身是一种线性数据结构,它可以用来存储一系列固定大小的元素。尽管数组可以用于实现队列的一些基本操作,比如入队(enqueue)和出队(dequeue),但由于其固定的大小,它并不适合…

开关电源重点可靠性测试项目与测试方法

为确保开关电源在复杂工作环境下的安全性与稳定性,各种安全性测试成为不可或缺的环节。本文将深入探讨几项关键的安全性测试项目,帮助用户全面了解如何评估开关电源的可靠性和安全性。 一、过压保护测试方法 目的是为了检测当输出电压过高时,…

Unity限制鼠标光标位置

限制鼠标光标位置 private void Awake() {Cursor.lockState CursorLockMode.Confined;//Cursor.visible false;隐藏鼠标光标 }●Confined:限制光标到游戏窗口。 ●Locked:锁定光标到游戏窗口的中心并隐藏。 ●None:不被修改。

项目9-网页聊天室2(登录)

0.前端知识储备 Ajax请求中的async:false/true的作用 - front-gl - 博客园 (cnblogs.com) 01.前端页面展示 02.后端代码 2.1 CONTROLLER RequestMapping("/login")public Result login(String username, String password, HttpSession httpSession){User user …

乡村振兴与农村社会治理现代化:加强农村社会治理体系和治理能力现代化建设,提升乡村治理效能,为美丽乡村建设提供坚实保障

一、引言 在全面推进乡村振兴的伟大实践中,农村社会治理现代化是不可或缺的重要一环。随着时代的发展,传统的农村社会治理方式已经无法满足现代社会发展的需求。因此,加强农村社会治理体系和治理能力现代化建设,提升乡村治理效能…

2024年电工杯数学建模竞赛思路资料汇总贴

下文包含:2024电工杯(电工杯数学建模竞赛)思路解析、电工杯参赛时间及规则信息说明、好用的数模技巧及如何备战数学建模竞赛 C君将会第一时间发布选题建议、所有题目的思路解析、相关代码、参考文献、参考论文等多项资料,帮助大家…

深度学习(文章链接汇总)

神经网络与深度学习-简要入门 动手学深度学习-pytorch版本(一):引言 & 预备知识 动手学深度学习-pytorch版本(二):线性神经网络 YOLOv8 学习与环境配置

XSS漏洞

漏洞描述 XSS全名叫Cross Site Scripting(跨站脚本攻击)因为简写和css同名所以改名为XSS,该漏洞主要利用javascript可以控制html,css,浏览器的行为从而恶意利用,当开发人员未对输入的内容进行过滤或编码时,恶意用户在…

苍穹外卖①

1.BeanUtils.copyProperties(orders,orderVO); BeanUtils.copyProperties 是 Java 中 Apache Commons BeanUtils 库的一个方法,它用于将一个 Java Bean 的属性复制到另一个 Java Bean。这个方法非常适合于对象之间的属性复制,尤其是当源对象和目标对象的…

云服务器上部署Kubernetes集群(K8S)

master节点:master node节点:node1 由于是ubuntu系统,参考两个博客配置 安装vmware搭建k8s集群(亲试无坑)-CSDN博客 该博客是centos系统,所以稍微有点区别结合另一篇博客一起参考 kubernetes集群…

scrapy进阶(豆瓣新书速递)(比亚迪)

scrapy数据建模与请求 学习目标: 应用 在scrapy项目中进行建模应用 构造Request对象,并发送请求应用 利用meta参数在不同的解析函数中传递数据scrapy构造post请求 1. 数据建模 通常在做项目的过程中,在items.py中进行数据建模 1.1 为什么建…