当前位置: 首页 > news >正文

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 参数,因为它有一个默认值。如果你需要提供一个不同的前缀,可以明确指定它。

相关文章:

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

Kotlin 的空指针检查 Kotlin 是一种空安全的语言,这意味着它强制开发者明确地处理可能的空值。在 Kotlin 中,所有的变量默认都是非空的,除非显式地标记为可为空。 声明可为空的变量 你可以通过在类型后面添加 ? 来声明一个变量可以为空&a…...

【力扣一轮】字符串异位 数组并集

先验知识记录: 遇到哈希问题,想到三种数据结构: ①数组:适用于哈希值比较小,范围较小, ②set:适用于哈希值较大。 ③map:如果需要用到键值对,则用之。 242.有效的字母…...

完美解决flex布局换行后最后一行不能和保持和满行的间距一致,或者左对齐的尴尬情景

display: grid; 是 CSS3 引入的一个非常强大的布局系统,允许你以二维网格的形式布局内容。这种布局模型在设计和构建复杂的网页布局时非常有用,因为它提供了对行和列的完全控制。 以下是关于 display: grid; 的一些基本概念和特性的讲解: 1…...

面试准备-项目【面试准备】

面试准备-项目【面试准备】 前言面试准备自我介绍:项目介绍: 论坛项目功能总结简介数据库表设计注册功能登录功能显示登录信息功能发布帖子评论私信点赞功能关注功能通知搜索网站数据统计热帖排行缓存 论坛项目技术总结Http的无状态cookie和session的区别…...

迭代器 增强for循环

迭代器原理 简单来说,迭代器就是一种可以访问集合的方式,就像一个游标或者指针,可以逐一查看集合(映射、列表)中的元素。 想象一下你有一张清单,上面列着你需要做的事情,但是你只能一次看一项。迭代器就像…...

Ubuntu系统版本查看办法

Ubuntu系统版本查看办法 1. 使用 lsb_release 命令2. 查看 /etc/issue 文件3. 使用 hostnamectl 命令4. 查看 /etc/os-release 文件5. 查看内核版本6. 使用 neofetch 命令(如果已安装)总结 在 Ubuntu 操作系统中,查看当前系统版本的详细信息可…...

HTML5 SVG技术应用

HTML5 SVG技术应用 目录 SVG属性SVG图像绘制 SVG路径SVG直线SVG矩形SVG圆形SVG椭圆SVG多边形SVG曲线SVG属性 SVG(Scalable Vector Graphics)元素拥有众多属性,这些属性用于定义图形的外观、位置、变换、交互等特性。 基本图形属 width 和 height: 定义SVG元素或图形的宽度…...

hcia datacom学习(10):交换机基础

1.二层交换机工作原理 1.1交换机的5种行为 查看mac地址表的命令为 dis mac-address *一个MAC只能关联在一个接口上,一个接口上可以学习多个MAC *mac地址漂移:mac表中,mac地址的出接口从一个端口变为另一个端口的现象。 造成mac漂移的原因…...

参考文献交叉引用两个文献,逗号隔开

1.引用两个参考文献,定位到word正文中需要引用的位置,然后插入-交叉引用,引好文献 2.选中两个参考文献,切换域代码,然后进行修改: 改为 上面的两张图片中的点是空格的含义,word中按ctrlshift8就…...

Linux多线程系列三: 生产者消费者模型,信号量使用,基于阻塞队列和环形队列的这两种生产者消费者代码的实现

Linux多线程系列三: 生产者消费者模型,信号量,基于阻塞队列和环形队列的这两种生产者消费者代码的实现 一.生产者消费者模型的理论1.现实生活中的生产者消费者模型2.多线程当中的生产者消费者模型3.理论 二.基于阻塞队列的生产者消费者模型的基础代码1.阻塞队列的介绍2.大致框架…...

Mongodb介绍及springboot集成增删改查

文章目录 1. MongoDB相关概念1.1 业务应用场景1.2 MongoDB简介1.3 体系结构1.4 数据模型1.5 MongoDB的特点 2. docker安装mongodb3. springboot集成3.1 文件结构3.2 增删改查3.2.1 增加insert3.2.2 保存save3.2.3 更新update3.2.4 查询3.2.5 删除 1. MongoDB相关概念 1.1 业务…...

JAVA 中 HTTP 基本认证(Basic Authentication)

目录 服务端这么做服务端告知客户端使用 Basic Authentication 方式进行认证服务端接收并处理客户端按照 Basic Authentication 方式发送的数据 客户端这么做如果客户端是浏览器如果客户端是 RestTemplat如果客户端是 HttpClient 其它参考 服务端这么做 服务端告知客户端使用 …...

【Flutter】 webview请求权限问题

需求&#xff1a;webview可以通过录音后语音转文字。 使用插件&#xff1a; permission_handler: ^11.0.1 webview_flutter: ^4.7.0 代码如下&#xff1a; 1.添加权限 添加安卓的权限&#xff1a; android/app/src/main/AndroidManifest.xml <uses-permission android…...

rocketmq 学习二 基本概念

教程&#xff1a;基本概念 | RocketMQ 视频教程 https://www.bilibili.com/video/BV1d5411y7UW?vd_sourcef1bd3b5218c30adf0a002c8c937e0a27 版本&#xff1a;5.0 一 基本概念 1.1 生产者/Producer 1.1.1 定义 消息发布者。是构建并传输消息到服务端的运行实体。…...

C++初阶学习第十弹——探索STL奥秘(五)——深入讲解vector的迭代器失效问题

vector&#xff08;上&#xff09;&#xff1a;C初阶学习第八弹——探索STL奥秘&#xff08;三&#xff09;——深入刨析vector的使用-CSDN博客 vector&#xff08;中&#xff09;&#xff1a;C初阶学习第九弹——探索STL奥秘&#xff08;四&#xff09;——vector的深层挖掘和…...

C#自动实现缺陷数据增强

实现该自动缺陷数据增强需要以下几个方面: 1、正样本若干; 2、负样本若干(ps抠图,为png透明图像) using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing...

JPHS-JMIR Public Health and Surveillance

文章目录 一、期刊简介二、征稿信息三、期刊表现四、投稿须知五、投稿咨询 一、期刊简介 JMIR Public Health and Surveillance是一本多学科期刊&#xff0c;专注于公共卫生创新与技术的交叉领域&#xff0c;包括公共卫生信息学、监测&#xff08;监测系统和快速报告&#xff…...

Flutter 中的 AnimatedThere 小部件:全面指南

Flutter 中的 AnimatedThere 小部件&#xff1a;全面指南 在Flutter中&#xff0c;动画是增强用户体验的强大工具。虽然Flutter没有一个名为AnimatedThere的官方小部件&#xff0c;但我们可以根据常见的动画模式来构建一个类似的自定义动画效果。本文将指导您如何使用Flutter的…...

2024南京智博会:展示国内外前沿科技成果,推动智能产业快速发展

2024南京智博会&#xff0c;一场科技盛宴的盛宴&#xff0c;汇聚了全球人工智能、物联网、大数据、机器人、自动驾驶等领域的最新技术和创新理念。作为一场国际性的盛会&#xff0c;它不仅展示了国内外前沿科技成果&#xff0c;更为参展者搭建了一个交流合作的平台&#xff0c;…...

基于springboot实现的校园博客系统

开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven…...

人从胚胎开始就要交税,直到死亡,是这样吗?

文章目录 梗概税收的基本概念从胚胎到死亡的税收分析胚胎到出生出生到成年成年到死亡 总结 梗概 人从胚胎阶段开始交税直到死亡&#xff0c;这个观点听起来有些戏剧化&#xff0c;但如果我们广义地理解“交税”这个概念&#xff0c;可以从不同的角度进行探讨。实际上&#xff…...

c语言指针入门(二)

今天学习了指针的两个常用场景&#xff0c;在此记录&#xff0c;以便后续查看。 场景1&#xff1a;传数组 在c语言中&#xff0c;我们在定义函数的时候是没有办法直接传一个数组进去的&#xff0c;为了解决这个问题&#xff0c;我们一般将数组的名称当作一个指针参数传入到函数…...

一篇讲透排序算法之插入排序and选择排序

1.插入排序 1.1算法思想 先将数组的第一个元素当作有序&#xff0c;让其后一个元素与其比较&#xff0c;如果比第一个元素小则互换位置&#xff0c;之后再将前两个元素当作有序的&#xff0c;让第三个元素与前两个元素倒着依次进行比较&#xff0c;如果第三个元素比第二个元素…...

CompletableFuture的主要用途是什么?

CompletableFuture 的主要用途是为复杂的异步编程模型提供一种更简单&#xff0c;更具可读性的方式。它主要用于以下几个方面&#xff1a; 非阻塞计算&#xff1a;CompletableFuture 为处理高延迟的计算任务提供了非阻塞的解决方案。你可以启动一个计算任务&#xff0c;而不需要…...

QtCreator,动态曲线实例

样式图&#xff1a; .ui 在sloem1.ui文件中&#xff0c;拖入一个label控件&#xff0c; 头文件.h #include "QtGui/QPainter.h" #include "QtCore/QTimer.h"protected:bool eventFilter(QObject *obj,QEvent *event);void labelPaint();public slots: /…...

Model-Based Pose Estimation for Rigid Objects(基于SIFT)

6D目标检测工程落地需求的小算力算法&#xff0c;本文具有借鉴意义&#xff0c;但对于特征点少的目标不太好用。 摘要 在多个实际应用中&#xff0c;经常会遇到确定图像中出现的物体姿态的问题。处理这一挑战的最有效策略是按照基于模型的范式进行&#xff0c;这涉及构建物体…...

STM32自己从零开始实操02:输入部分原理图

一、触摸按键 1.1指路 项目需求&#xff1a; 4个触摸按键&#xff0c;主控芯片 TTP224N-BSBN&#xff08;嘉立创&#xff0c;封装 TSSOP-16&#xff09;&#xff0c;接入到 STM32 的 PE0&#xff0c;PE1&#xff0c;PE2&#xff0c;PE3。 1.2走路 1.2.1数据手册重要信息提…...

JavaScript异步编程——03-Ajax传输json和XML的技术文档

JavaScript异步编程——03-Ajax传输json和XML的技术文档 目录 JavaScript异步编程——03-Ajax传输json和XML的技术文档 一、引言 二、Ajax简介 三、Ajax传输JSON数据 四、Ajax传输XML数据 五、总结 一、引言 在现代Web开发中&#xff0c;Ajax技术已经成为实现前后端数据交…...

移动端常用meta

在移动端开发中&#xff0c;<meta> 标签用于提供关于HTML文档的元数据&#xff0c;这些元数据不会显示在页面上&#xff0c;但可以被浏览器解析&#xff0c;用于控制页面的行为和外观。以下是一些在移动端开发中常用的 标签&#xff1a; 1. 视口设置 这是移动端开发中最…...

C++_C++11的学习

1. 统一的列表初始化 1.1&#xff5b;&#xff5d;初始化 在C98 中&#xff0c;标准就已经允许使用花括号 {} 对数组或者结构体元素进行统一的列表初始值设定。而到了C11&#xff0c;标准扩大了用大括号括起的列表 ( 初始化列表 )的使用范围&#xff0c;使其能适用于所有的内…...