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类似:它执行给定的块并返回调用的对象。在块内部,对象被它引用,日志打印;

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

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

相关文章

剑指 Offer(第2版)面试题 11:旋转数组的最小数字

剑指 Offer(第2版)面试题 11:旋转数组的最小数字 剑指 Offer(第2版)面试题 11:旋转数组的最小数字解法1:二分查找 剑指 Offer(第2版)面试题 11:旋转数组的最小…

LeetCode(45)最长连续序列【哈希表】【中等】

目录 1.题目2.答案3.提交结果截图 链接: 最长连续序列 1.题目 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1&a…

鸿蒙原生应用/元服务开发-开发者如何进行真机测试

前提条件:已经完成鸿蒙原生应用/元服务开发,已经能相对熟练使用DevEco Studio,开发者自己有鸿蒙4.0及以上的真机设备。 真机测试具体流程如下 1.手机打开开发者模式 2.在项目中,左上角 文件(F)->项目结构 进行账号连接 3.运行

基于AT89C51单片机的电子闹钟设计

1.设计任务 利用AT89C51单片机为核心控制元件,设计一个电子闹钟,设计的系统实用性强、操作简单,实现了智能化、数字化。 (1)按开始键自动进入时间显示,开始为0,按K1键进入更改时间&#xff0c…

C++核心编程——运算符重载

C核心编程——运算符重载 运算符重载的方法运算符重载函数作成员函数与友元函数重载双目运算符重载单目运算符重载流插入运算符和"<<"和流提取运算符">>"重载流插入运算符和"<<"流提取运算符">>" 运算符重载的…

百度贴吧大战:国内工厂爆改RTX 4090游戏显卡!用于AI模型训练

最近这英伟达芯片禁售这事&#xff0c;可谓搅的 AI 圈、游戏圈风起云涌&#xff0c;前不久我们刚刚报道完老黄如法炮制再次推出三款中国特供版 AI 芯片&#xff0c;后脚我们就发现国内公司也上有政策下有对策&#xff0c;百度贴吧显卡吧有网友在前线发来报道&#xff1a; 国内 …

提升APP软件的用户体验方法

提升APP软件的用户体验是确保用户满意度和应用成功的关键。以下是一些方法&#xff0c;可以帮助提升APP的用户体验&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.简洁的用户界面设计&#xff1a; …

女子曝被医生男友下药流产,男子被警方行拘10日,医院停职!

近日&#xff0c;一则关于女子被医生男友暗中下堕胎药导致流产的消息引起了广泛关注。经过一个多月的报案和调查&#xff0c;如今有了新的进展。 11月30日&#xff0c;王女士向华商报大风新闻记者证实&#xff0c;北京中关村某医院涉事医生已被行政拘留&#xff0c;被处以行政拘…

【Linux】I/O多路转接技术

I/O多路转接技术 一、I/O多路转接之select1、select函数2、fd_set的相关内容3、如何在代码中高效的使用select函数4、select服务器5、select的优缺点6、select的适用场景 二、I/O多路转接之poll1、poll函数2、struct pollfd结构2、poll服务器3、poll的优缺点 三、I/O多路转接之…

hbase thrift2 jar包冲突导致启动失败问题排查记录

1、启动命令 ${HBASE_HOME}/bin/hbase-daemon.sh start thrift2 2、异常情况 hbase-root-thrift2-hdfs-test07.yingzi.com.out异常日志&#xff1a; Exception in thread "main" java.lang.AbstractMethodError: org.apache.hadoop.metrics2.sink.timeline.Hadoo…

在cmd下查看mysql表的结构信息

我提前已经在mysql数据库中创建了一个表&#xff1a; 在cmd下&#xff0c;登录mysql以后&#xff0c;使用命令describe 表名、或者explain 表名可以查看表结构信息。但在实践中&#xff0c;查看表结构&#xff0c;多用describe命令&#xff0c;而查看执行计划用explain。 例…

element ui el-date-picker日期时间选择器 设置只能选择不大于30天时间范围

需求&#xff1a;要求日期时间选择器只能选择最多32天&#xff0c;其他日期为不可点击状态。 日期组件type为daterange或者datetimerange都生效 实现&#xff08;vue2.x&#xff09;&#xff1a; 通过属性picker-options html <el-date-pickerv-model"dateTime&qu…