Kotlin let run with apply also 关键字

Kotlin let run with apply also 关键字

参考官网学习资料 https://play.kotlinlang.org/byExample/06_scope_functions/

一、 let

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

fun customPrint(s: String) {print(s.uppercase())
}fun main() {val empty = "test".let {               // 1customPrint(it)                    // 2it.isEmpty()                       // 3}println(" is empty: $empty")fun printNonNull(str: String?) {println("Printing \"$str\":")str?.let {                         // 4print("\t")customPrint(it)println()}}fun printIfBothNonNull(strOne: String?, strTwo: String?) {strOne?.let { firstString ->       // 5 strTwo?.let { secondString ->customPrint("$firstString : $secondString")println()}}}printNonNull(null)printNonNull("my string") printIfBothNonNull("First","Second") 
}
  1. 根据字符串“test”的结果调用给定块。

  2. 通过 it 引用调用“test”上的函数。

  3. let 返回该表达式的值。

  4. 使用安全调用,因此 let 及其代码块将仅在非空值上执行。

  5. 使用自定义名称代替it,以便嵌套let可以访问外部let的上下文对象。在此代码里也就是firstString替代了第一层范围内的it,secondStirng替代了第二层范围内的it

二、 run

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

fun main() {fun getNullableLength(ns: String?) {println("for \"$ns\":")ns?.run {                                                  // 1println("\tis empty? " + isEmpty())                    // 2println("\tlength = $length")                           length                                                 // 3}}getNullableLength(null)getNullableLength("")getNullableLength("some string with Kotlin")
}

简单来说就是run括号里的可以直接不用额外的this或者it来代替当前对象去调用该对象的方法,可以直接调用该对象里的方法

三、with

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

class 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}")    
}

用with修饰的小括号里范围内可以直接不用写对象变量名直接调用成员了,比如不用configuration.host,而可以直接写成host

四、apply

apply 在对象上执行一段代码并返回对象本身。在块内,对象由 this 引用。该函数对于初始化对象很方便。

data class Person(var name: String, var age: Int, var about: String) {constructor() : this("", 0, "")
}fun main() {val jake = Person()                                     // 1val stringDescription = jake.apply {                    // 2name = "Jake"                                       // 3age = 30about = "Android developer"}.toString()                                            // 4println(stringDescription)
}

五、also

也像 apply 一样工作:它执行给定的块并返回调用的对象。在块内部,对象由它引用,因此更容易将其作为参数传递。此函数可以方便地嵌入附加操作,例如登录调用链。

data class Person(var name: String, var age: Int, var about: String) {constructor() : this("", 0, "")
}fun writeCreationLog(p: Person) {println("A new person ${p.name} was created.")              
}fun main() {val jake = Person("Jake", 30, "Android developer")   // 1.also {                                          // 2 writeCreationLog(it)                         // 3}
}

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

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

相关文章

AutoCAD 2024:计算机辅助设计(CAD)软件中文版

AutoCAD是一款广受全球设计师和工程师欢迎的计算机辅助设计(CAD)软件。自1982年首次推出以来,AutoCAD已经经历了多次迭代和改进,不断提升用户在产品设计、建造和工程领域的工作效率。现在,让我们一起探索AutoCAD 2024的…

NAT网关在阿里云的应用

NAT网关(Network Address Translation Gateway)是一种网络地址转换服务,提供NAT代理(SNAT和DNAT)能力。NAT是用于在本地网络中使用私有地址,在连接互联网时转而使用全局 IP 地址的技术。NAT实际上是为解决I…

高性能服务器之mysql数据库连接池设计与实现

高性能服务器之mysql数据库连接池设计与实现 链接:https://pan.baidu.com/s/1ISZ1Sy087GUeaekW3sV_oA?pwd0t9q 内存泄漏 链接:https://pan.baidu.com/s/1AWPnbuzVSpoP-CnEgJk5hg?pwdaieq 提取码:aieq 线程池 链接:https://pan…

SamSung三星笔记本NP930QCG-K02CN原装出厂OEM预装Win10系统

下载链接:https://pan.baidu.com/s/13GsR_r9caJkLjiWWaXa30Q?pwdncp9 系统自带指纹驱动、声卡,网卡,显卡等所有驱动、三星出厂时主题壁纸、系统属性三星专属LOGO标志、Office办公软件等三星出厂时自带的预装程序 由于时间关系,绝大部分资料没有上传,不…

CS鱼饵制作

文章目录 宏病毒(宏钓鱼)快捷方式钓鱼shellQMaker bug伪装pdf文件上线 宏病毒(宏钓鱼) 启动teamsever服务器,具体过程请参考我之前的文章: 在主机中启动CS客户端,111是真实机的用户&#xff1a…

Spring底层核心原理解析

Bean的创建过程 简易图: service.class–>无参构造方法(推断构造方法)–>对象–>依赖注入(有Autowired的属性赋值)–>初始化前(postConstruct)–>初始化(implement InitializationBean)–>初始化后(AOP)–>代理对象–>Bean 重要的两个属…

【Mysql】Innodb数据结构(四)

概述 MySQL 服务器上负责对表中数据的读取和写入工作的部分是存储引擎 ,而服务器又支持不同类型的存储引擎,比如 InnoDB 、MyISAM 、Memory 等,不同的存储引擎一般是由不同的人为实现不同的特性而开发的,真实数据在不同存储引擎中…

推荐系统离线评估方法和评估指标,以及在推荐服务器内部实现A/B测试和解决A/B测试资源紧张的方法。还介绍了如何在TensorFlow中进行模型离线评估实践。

文章目录 🌟 离线评估:常用的推荐系统离线评估方法有哪些?🍊 1. RMSE/MSE🍊 2. MAE🍊 3. Precision/Recall/F1-score🍊 4. Coverage🍊 5. Personalization🍊 6. AUC &…

【Linux】【创建文件】Linux系统下在命令行中创建文件的方法

🐚作者简介:花神庙码农(专注于Linux、WLAN、TCP/IP、Python等技术方向)🐳博客主页:花神庙码农 ,地址:https://blog.csdn.net/qxhgd🌐系列专栏:Linux技术&…

Linux:mongodb数据逻辑备份与恢复(3.4.5版本)

我在数据库aaa的里创建了一个名为tarro的集合,其中有三条数据 备份语法 mongodump –h server_ip –d database_name –o dbdirectory 恢复语法 mongorestore -d database_name --dirdbdirectory 备份 现在我要将aaa.tarro进行备份 mongodump --host 192.168.254…

[uni-app] canvas绘制圆环进度条

文章目录 需求参考链接基本问题的处理1:画布旋转的问题2:注意arc()的起始位置是3点钟方向3: 如果绘制1.9*Matn.PI的圆环, 要保证其实位置在0点方向?4:小线段怎么画, 角度怎么处理? 源码 需求 要绘制一个如此的进度条 参考链接 uni-app使用canvas绘制时间刻度以及不显示问…

华纳云:怎么判断VPS的ip是不是公网ip

要判断一个VPS的IP地址是否为公网IP,您可以执行以下步骤: 查看IP地址: 首先,获取您的VPS的IP地址。您可以使用以下命令来查看VPS的IP地址: curl ifconfig.me 或 curl ipinfo.io/ip 这些命令将显示VPS的公网IP地址。 检…

el-table的formatter属性的使用方法

一、formatter是什么? formatter是el-table-column的一个属性,用来格式化内容。(比如后台给你返0或1,你需要展示成“否”和“是”) 二、详细使用 1.知道formatter之前: 代码如下(示例&#…

Cesium Vue(三)— 相机配置

1. 坐标系转换 1.1 cesium使用到的坐标系 屏幕坐标系,二维的笛卡尔坐标系,API > Cartesian2地理空间坐标系,WGS-84坐标系, API > Cartographic(经度,维度,高度)三维笛卡尔空间直角坐标系&#xff0…

leetcode-279. 完全平方数

1. 题目链接 链接: 题目链接 2. 解答 #include <stdio.h> #include <stdlib.h> #include <stdbool.h>bool issquare(int n) {if (n 1 || n 4) return true;if (n 2 || n 3) return false;for (int i 3; i < n/2; i ) {if (n i*i) return true;}…

react使用echarts图表

要在React中使用Echarts图表库&#xff0c;可以按照以下步骤进行操作&#xff1a; 首先&#xff0c;确保你的React项目已经安装了Echarts库。可以通过运行以下命令来安装Echarts npm install echarts --save在你的组件文件中&#xff0c;导入Echarts库&#xff1a; import ech…

黑马程序员Java Web--14.综合案例--删除品牌功能实现

一、BrandMapper 添加删除单个数据的函数和sql语句 Delete("delete from tb_brand where id#{id}")void deleteById(int id);二、BrandService 定义一个删除单个数据的接口 void deleteById(int id);三、BrandServiceImpl 在BrandServiceImpl重写deleteById方法&a…

笔记本Win10系统一键重装操作方法

笔记本电脑已经成为大家日常生活和工作中必不可少的工具之一&#xff0c;如果笔记本电脑系统出现问题了&#xff0c;那么就会影响到大家的正常操作。这时候就可以考虑给笔记本电脑重装系统了。接下来小编给大家介绍关于一键重装Win10笔记本电脑系统的详细步骤方法。 推荐下载 系…

RabbitMQ高级知识点

以下是一些 RabbitMQ 的高级知识点&#xff1a; 1. Exchange&#xff1a; RabbitMQ 中的 Exchange 是消息路由器&#xff0c;用来接收消息并且转发到对应的 Queue 中。Exchange 有四种类型&#xff1a;Direct Exchange、Fanout Exchange、Topic Exchange 和 Headers Exchange。…

ftp靶机_获取shell

ftp靶机_获取shell 文章目录 ftp靶机_获取shellftp概念实验环境信息探测 发现漏洞优化shell ftp概念 FTP 是File Transfer Protocol(文件传输协议)的英文简称&#xff0c;而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时&#xff0c;它也是一个应用程序(…