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

Kotlin:常用标准库函数(let、run、with、apply、also)

一、let 扩展函数

Kotlin标准库函数let可用于范围确定和空检查。当调用对象时,let执行给定的代码块并返回其最后一个表达式的结果。对象可以通过引用(默认情况下)或自定义名称在块中访问。

let扩展函数源码
在这里插入图片描述

let.kt文件代码


fun main() {println("isEmpty = $isEmpty")printNonNull(null)printNonNull("my string")printIfBothNonNull("First","Second")//下面是运行结果//test//isEmpty = false//Printing "null"://Printing "my string"://	my string////First : Second}val isEmpty = "test".let {println(it)               // 2it.isEmpty()
}fun printNonNull(str:String?){println("Printing \"$str\":")str?.let {print("\t")println(it)println()}
}fun printIfBothNonNull(strOne: String?, strTwo: String?) {strOne?.let { firstString ->strTwo?.let { secondString ->println("$firstString : $secondString")println()}}
}

运行结果
在这里插入图片描述

二、run 扩展函数

与let类似,run是标准库中的另一个作用域函数。基本上,它做同样的事情:执行一个代码块并返回其结果。
不同的是,在内部运行对象是通过this访问的。当您想要调用对象的方法而不是将其作为参数传递时,这是很有用的。

run扩展函数源码
在这里插入图片描述

run.kt文件代码

fun getNullableLength(ns: String?) {println("for \"$ns\":")val resutl = ns?.run {println("\tis empty? " + isEmpty())println("\tlength = $length")length}//返回最后一行println("resutl = $resutl")
}fun main(){getNullableLength(null)getNullableLength("")getNullableLength("some string with Kotlin")//下面是运行结果//for "null"://resutl = null//for ""://	is empty? true//	length = 0//resutl = 0//for "some string with Kotlin"://	is empty? false//	length = 23//resutl = 23}

运行结果
在这里插入图片描述

三、with函数

With是一个非扩展函数,可以简洁地访问其参数的成员:在引用其成员时,可以省略实例名。

with函数源码
在这里插入图片描述

with.kt文件代码

fun main() {val personal = Personal("test", 20)val withResult = with(personal) {println("name = $name")println("age = $age")2122}println("withResult = $withResult")//name = test//age = 20//withResult = 22
}class Personal(var name: String, var age: Int)

运行结果
在这里插入图片描述

四、apply扩展函数

apply在对象上执行代码块并返回对象本身。在块内部,对象被this引用。这个函数对于初始化对象很方便。

在实际项目用来显示列表数据的RecyclerView.Adapter里onBindViewHolder方法里使用apply或with函数较多

apply扩展函数源码
在这里插入图片描述

apply.kt文件代码

fun main() {val jake = Person()val stringDescription = jake.apply {name = "Jake"age = 30about = "Android developer"}.toString()println("stringDescription  = $stringDescription")//stringDescription  = Person(name=Jake, age=30, about=Android developer)}class Person() {var name: String? = nullvar age: Int = 20var about: String? = nulloverride fun toString(): String {return "Person(name=$name, age=$age, about=$about)"}
}

运行结果
在这里插入图片描述

五、also扩展函数

它也像apply一样工作:它执行一个给定的块并返回被调用的对象。在块内部,对象被它引用,所以它更容易作为参数传递。这个函数可以方便地嵌入其他操作,比如在调用链中登录。

also扩展函数源码
在这里插入图片描述

also.kt文件代码

fun main() {val jake = Person2().also {println(it)}getPerson().also {it.token?.let { tempToen -> login(tempToen) }}
}class Person2(var name: String = "test",var age: Int = 0,var about: String? = null
) {var token: String? = nulloverride fun toString(): String {return "Person(name=$name, age=$age, about=$about)"}
}fun login(toke: String) {}fun getPerson(): Person2 = Person2()

运行结果
在这里插入图片描述

推荐

Kotlin: 协程的四种启动模式(CoroutineStart)

相关文章:

Kotlin:常用标准库函数(let、run、with、apply、also)

一、let 扩展函数 Kotlin标准库函数let可用于范围确定和空检查。当调用对象时,let执行给定的代码块并返回其最后一个表达式的结果。对象可以通过引用(默认情况下)或自定义名称在块中访问。 let扩展函数源码 let.kt文件代码 fun main() {println("isEmpty $is…...

雷军给年轻人的五点建议

前言 拿来激励自己,没事就看一看,给自己高一点的要求. 致刚入门的程序员五点建议 每个IT企业,尤其是初创企业,非常苦恼:找不到好的程序员。现在大学、软件学院及各种培训机构,每年培养几十万的程序员,毕业的每个人都…...

Unity DOTS物理引擎的核心分析与详解

最近DOTS发布了正式的版本,同时基于DOTS的理念实现了一套高性能的物理引擎,今天我们来给大家分享和介绍一下这个物理引擎的使用。 Unity.Physics的设计哲学 Unity.Physics是基于DOTS设计思想的一个高性能C#物理引擎的实现, 包含了物理刚体的迭代计算与碰撞检测等查…...

C++ //练习 12.4 在我们的check函数中,没有检查i是否大于0。为什么可以忽略这个检查?

C Primer(第5版) 练习 12.4 练习 12.4 在我们的check函数中,没有检查i是否大于0。为什么可以忽略这个检查? 环境:Linux Ubuntu(云服务器) 工具:vim 解释 size_type类型是无符号整…...

达梦备份与恢复

达梦备份与恢复 基础环境 操作系统:Red Hat Enterprise Linux Server release 7.9 (Maipo) 数据库版本:DM Database Server 64 V8 架构:单实例1 设置bak_path路径 --创建备份文件存放目录 su - dmdba mkdir -p /dm8/backup--修改dm.ini 文件…...

iOS App Store审核要求与Flutter应用的兼容性分析

本文探讨了使用Flutter开发的iOS应用能否上架,以及上架的具体流程。苹果提供了App Store作为正式上架渠道,同时也有TestFlight供开发者进行内测。合规并通过审核后,Flutter应用可以顺利上架。但上架过程可能存在一些挑战,因此可能…...

javaScript常见对象方法总结

1,object.assign() 用于合并对象的属性。它可以将一个或多个源对象的属性复制到目标对象中,实现属性的合并。 语法 Object.assign(target, ...sources); 1,target:目标对象,将属性复制到该对象中。 2,sources:一个…...

使用Java流API构建树形结构数据

简介: 在实际开发中,构建树状层次结构是常见需求,如组织架构、目录结构或菜单系统。本教案通过解析给定的Java代码,展示如何使用Java 8 Stream API将扁平化的菜单数据转换为具有层级关系的树形结构。 1. 核心类定义 - Menu Data…...

蓝桥杯备考

1.1 输入输出 cin/cout scanf/printf 万能头文件 #include<bits/stdc.h> cin/cout 速度相对慢&#xff0c;需要关同步,代码如下 #include<bits/stdc.h> using namespace std; int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int x,y;cin>>x…...

Linux云计算之Linux基础1——操作系统理论基础

目录 1、UNIX 的诞生和广泛使用 2、CPU 架构类型 3、CPU 指令 4、计算机程序设计和执行过程 5、操作统OS 6、编程层次 7、程序的内部运行接口 8、UI程序接口(人机交互接口) 9、程序的运行模式: 10、POSIX&#xff1a;可移植操作系统规范 11、计算机开源领域 12、Li…...

大模型从入门到应用——OpenAI基础调用

摘要&#xff1a;这是OpenAI的基本调用&#xff0c;通过文章了解大模型的一个基础使用 1. 调用说明 在大型语言模型&#xff08;LLM&#xff09;的应用中&#xff0c;OpenAI的基础调用是入门的关键一步。通过调用OpenAI的API&#xff0c;我们可以利用其强大的语言处理能力&am…...

前端学习<三>CSS进阶——0102-CSS布局样式

前言 css 进阶的主要内容如下。 1、css 非布局样式 html 元素的分类和特性 css 选择器 css 常见属性&#xff08;非布局样式&#xff09; 2、css 布局相关 css 布局属性和组合解析 常见布局方案 三栏布局案例 3、动画和效果 属于 css 中最出彩的内容。 多背景多投影特…...

关于51单片机TMOD定时器的安全配置

定时器介绍&#xff1a; -------------------------------------------------------------------------------------------------------------------------- 首先配置的是控制寄存器 TCON 说直白点&#xff0c;这个寄存器就是用来计数的&#xff0c;打开计时器&#xff0c;关…...

Unity 主线程和其他线程之间的数据访问

在Unity中&#xff0c;主线程和其他线程之间的数据访问需要小心处理&#xff0c;因为在多线程环境下&#xff0c;不当的数据访问可能导致竞争条件和数据不一致性。 在Unity中&#xff0c;主线程通常用于处理用户输入、更新游戏逻辑和渲染。其他线程通常用于执行耗时的计算、加…...

电商系列之风控安全

> 插&#xff1a;AI时代&#xff0c;程序员或多或少要了解些人工智能&#xff0c;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 坚持不懈&#xff0c;越努力越幸运&#xff0c;大家…...

计算机网络针对交换机的配置

实验 目的 交换机的基本配置&#xff0c;交换机VLAN配置 实验条件 Windows&#xff0c;Cisco packet tracer 实验 内容 交换机的基本配置&#xff0c;交换机VLAN配置 实验 过程 一、交换机的基本配置 进入特权模式 Switch>enable 进入配置模式 Switch#configure ter…...

Python爬虫之分布式爬虫

分布式爬虫 1.详情介绍 分布式爬虫是指将一个爬虫任务分解成多个子任务&#xff0c;在多个机器上同时执行&#xff0c;从而加快数据的抓取速度和提高系统的可靠性和容错性的技术。 传统的爬虫是在单台机器上运行&#xff0c;一次只能处理一个URL&#xff0c;而分布式爬虫通过将…...

服务器硬件基础知识解析

导言 在当今信息化时代&#xff0c;服务器扮演着至关重要的角色&#xff0c;它们是存储、处理和传输数据的关键设备。本文将介绍服务器硬件的基础知识&#xff0c;包括服务器的组成部分、硬件选型和性能评估等内容&#xff0c;旨在帮助读者更好地理解和应用服务器技术。 服务…...

【芯片设计- RTL 数字逻辑设计入门 1.1 -- Verdi 使用入门介绍 1】

请阅读【芯片设计 RTL 数字逻辑设计扫盲 】 文章目录 Verdi 介绍Verdi 特点和功能Verdi 基本操作Verdi -elab与-dbdir区别-elab 参数介绍-dbdir 参数介绍区别总结Verdi 介绍 Verdi 是由Synopsys公司开发的一款业界领先的自动化电子设计自动化(EDA)工具,主要用于功能验证和调…...

ssm034学生请假系统+jsp

学生请假系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本学生请假系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发&#xff0c;其初衷是为了满足他自己的一个项目需求&#xff0c;即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源&#xff0c;Redis凭借其简单易用、…...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分&#xff1a; 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...

sshd代码修改banner

sshd服务连接之后会收到字符串&#xff1a; SSH-2.0-OpenSSH_9.5 容易被hacker识别此服务为sshd服务。 是否可以通过修改此banner达到让人无法识别此服务的目的呢&#xff1f; 不能。因为这是写的SSH的协议中的。 也就是协议规定了banner必须这么写。 SSH- 开头&#xff0c…...