Kotlin学习——kt里的作用域函数scope function,let,run,with,apply,also

2023-12-01 15:12

本文主要是介绍Kotlin学习——kt里的作用域函数scope function,let,run,with,apply,also,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

Kotlin 是一门现代但已成熟的编程语言,旨在让开发人员更幸福快乐。 它简洁、安全、可与 Java 及其他语言互操作,并提供了多种方式在多个平台间复用代码,以实现高效编程。

https://play.kotlinlang.org/byExample/01_introduction/02_Functions

其他关于kt的博客文章如下:

  • Kotlin学习——hello kotlin & 函数function & 变量 & 类 + 泛型 + 继承
  • Kotlin学习——流程控制,when,循环,range工具 & kt里的equals & if实现类似三元表达式的效果
  • Kotlin学习——kt中的类,数据类 & 枚举类 & 密封类,以及对象
  • Kotlin学习——kt里面的函数,高阶函数 & 函数式编程 & 扩展函数和属性
  • Kotlin学习——kt里的集合List,Set,Map & List集合的各种方法之Int篇
  • Kotlin学习——kt里的集合,Map的各种方法之String篇

目录

  • 引出
    • let
    • run
    • with
    • apply 类似set方法
    • also 打印日志
  • 总结

引出


1.Kotlin标准库函数let可用于作用域和null检查;
2.执行一个代码块并返回其结果。不同的是,在run函数中,对象是通过 this 访问的;
3.with是一个非扩展函数,可以简洁地访问其参数的成员:在引用其成员时可以省略实例名称;
4.apply在对象上执行一个代码块,并返回对象本身;
5.also工作原理与apply类似:它执行给定的块并返回调用的对象。在块内部,对象被它引用,日志打印;

let

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

package com.tianju.kt.scopeFuncfun customPrint(s: String) {print(s.uppercase())
}fun main() {val empty = "test".let {customPrint(it)it.isEmpty()}// TEST is empty falseprintln(" is empty $empty")// Printing "null":// Printing "my string"://	MY STRINGfun printNonNull(str: String?) {println("Printing \"$str\":")str?.let {print("\t")customPrint(it)println()}}// FIRST : SECONDfun printIfBothNonNull(strOne: String?, strTwo: String?) {strOne?.let { firstString ->strTwo?.let { secondString ->customPrint("$firstString : $secondString")println()}}}printNonNull(null)printNonNull("my string")printIfBothNonNull("First","Second")
}

在这里插入图片描述

run

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

package com.tianju.kt.scopeFuncfun main() {fun getNullableLength(ns: String?) {println("for \"$ns\":")ns?.run {// 访问对象的成员时不使用其名称println("\tis empty? " + isEmpty())println("\tlength = $length")this.length}}getNullableLength(null)getNullableLength("")getNullableLength("some string with Kotlin")
}

在这里插入图片描述

with

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

package com.tianju.kt.scopeFuncclass Configuration(var host: String, var port: Int)fun main() {val configuration = Configuration(host = "127.0.0.1", port = 9000)// 在引用其成员时可以省略实例名称with(configuration) {println("$host:$port")}// instead of:println("${configuration.host}:${configuration.port}")
}

在这里插入图片描述

apply 类似set方法

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

类似java里面new 对象后,进行set值

package com.tianju.kt.scopeFunc/*** 数据类*/
data class Person(var name: String, var age: Int, var about: String) {// 构造方法有默认值constructor() : this("", 0, "")
}fun main() {val jake = Person()println(jake)val stringDescription = jake.apply {name = "Jake"age = 30about = "Android developer"}.toString()println(stringDescription)
}

在这里插入图片描述

also 打印日志

also工作原理与apply类似:它执行给定的块并返回调用的对象。在块内部,对象被它引用,因此更容易将其作为参数传递。此函数便于嵌入其他操作,可以用于打印日志

package com.tianju.kt.scopeFuncdata class PersonP(var name: String, var age: Int, var about: String) {constructor() : this("", 0, "")
}fun writeCreationLog(p: PersonP) {println("A new person ${p.name} was created.")
}fun main() {val jake = PersonP("Jake", 30, "Android developer").also {writeCreationLog(it)}println(jake)
}

在这里插入图片描述


总结

1.Kotlin标准库函数let可用于作用域和null检查;
2.执行一个代码块并返回其结果。不同的是,在run函数中,对象是通过 this 访问的;
3.with是一个非扩展函数,可以简洁地访问其参数的成员:在引用其成员时可以省略实例名称;
4.apply在对象上执行一个代码块,并返回对象本身;
5.also工作原理与apply类似:它执行给定的块并返回调用的对象。在块内部,对象被它引用,日志打印;

这篇关于Kotlin学习——kt里的作用域函数scope function,let,run,with,apply,also的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/441649

相关文章

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

Python Counter 函数使用案例

《PythonCounter函数使用案例》Counter是collections模块中的一个类,专门用于对可迭代对象中的元素进行计数,接下来通过本文给大家介绍PythonCounter函数使用案例... 目录一、Counter函数概述二、基本使用案例(一)列表元素计数(二)字符串字符计数(三)元组计数三、C

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

MySQL中REPLACE函数与语句举例详解

《MySQL中REPLACE函数与语句举例详解》在MySQL中REPLACE函数是一个用于处理字符串的强大工具,它的主要功能是替换字符串中的某些子字符串,:本文主要介绍MySQL中REPLACE函... 目录一、REPLACE()函数语法:参数说明:功能说明:示例:二、REPLACE INTO语句语法:参数

Kotlin 枚举类使用举例

《Kotlin枚举类使用举例》枚举类(EnumClasses)是Kotlin中用于定义固定集合值的特殊类,它表示一组命名的常量,每个枚举常量都是该类的单例实例,接下来通过本文给大家介绍Kotl... 目录一、编程枚举类核心概念二、基础语法与特性1. 基本定义2. 带参数的枚举3. 实现接口4. 内置属性三、

python中update()函数的用法和一些例子

《python中update()函数的用法和一些例子》update()方法是字典对象的方法,用于将一个字典中的键值对更新到另一个字典中,:本文主要介绍python中update()函数的用法和一些... 目录前言用法注意事项示例示例 1: 使用另一个字典来更新示例 2: 使用可迭代对象来更新示例 3: 使用

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

Python lambda函数(匿名函数)、参数类型与递归全解析

《Pythonlambda函数(匿名函数)、参数类型与递归全解析》本文详解Python中lambda匿名函数、灵活参数类型和递归函数三大进阶特性,分别介绍其定义、应用场景及注意事项,助力编写简洁高效... 目录一、lambda 匿名函数:简洁的单行函数1. lambda 的定义与基本用法2. lambda