Android面试题之Kotlin的apply、let、also、run函数

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点

apply

apply函数可以看作是一个配置函数,可以传入一个接收者,然后调用一系列函数来配置以便使用,如果提供lambda给apply函数执行,将返回配置好的接收者

apply能让每个配置函数都作用于接收者

val file1 = File("C://Android").apply {setExecutable(false)setReadable(true)setWritable(true)
}

let

能使某个变量作用于其Lambda表达式里,让it关键字能引用它。

fun main() {val result = listOf(3,2,1).first().let {it*it}println(result)
}fun formatName(name:String?): String {return name?.let { "Whelcome, $it" } ?: "name?"
}

run

  • 和apply差不多,但返回的是lambda的执行结果,而apply返回的是接收者

  • 可以执行函数引用

  • 多个函数引用可以链式调用

    fun main() {
    var file = File(“D:test.txt”)
    val result = file.run {
    readText().contains(“hava”)
    }
    println(result)
    //执行函数引用
    “hhhhh”
    .run(::isLong)
    .run(::showTip)
    .run(::println)
    }

    fun isLong(name:String) = name.length >= 3

    fun showTip(isLong:Boolean) :String {
    return if (isLong){
    “too long”
    }else{
    “OK”
    }
    }

with

是run函数的变体,功能行为一样,with的调用方式不同,with需要值参作为其第一个参数传入

fun main() {val result = "hkjkj".run { length >=3 }println(result)val result1 = with("hkjkj"){length>=3}println(result1)
}

also

和let相似,需要把接收者值参传给lambda,但also返回接收者对象。also尤其适合针对同一原始对象,可以基于原始接收者对象执行额外的链式调用

fun main() {var fileContent:List<String>var reuslt = File("D://Android").also { println(it.name) }.also { fileContent = it.readLines() }println(fileContent)
}

takeif

takeif函数需要判断lambda中提供的条件表达式的结果,如果是true,takeif函数返回接收者对象,如果是false,返回Null。

如果需要判断某个条件是否满足,再决定是否可以赋值变量或执行某项任务,takeif就非常有用

fun main() {val result = File("D://Android").takeIf { it.exists() && it.canRead() }?.readText()println(result)
}

takeUnless

与takeif的返回结果情况相反,返回为false才会返回

let、apply和run
函数入参功能返回值
let当前调用者,可以用it代替可以对参数it进行操作返回lambda的结果
apply调用当前对象的一系列函数返回接收者
run调用接收者的一系列函数,还可以执行函数引用,也就是调用其他函数返回lambda的结果

let会把接收者传给lambda,而apply什么都不传;匿名函数执行完,apply会返回当前的接收者,而let会返回lambda的最后一行


欢迎关注我的公众号查看更多精彩文章!

AntDream

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

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

相关文章

Redis-数据过期策略

文章目录 Redis数据持久化策略的作用是什么&#xff1f;Redis的数据过期策略有哪些&#xff1f;惰性删除定期删除 更多相关内容可查看 Redis数据持久化策略的作用是什么&#xff1f; Redis数据过期策略是指在Redis中设置数据的过期时间&#xff0c;并在数据过期时自动从数据库…

《安富莱嵌入式周报》第336期:开源计算器,交流欧姆表,高性能开源BLDC控制器,Matlab2024a,操作系统漏洞排名,微软开源MS-DOS V4.0

周报汇总地址&#xff1a;嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 本周更新一期视频教程&#xff1a; BSP视频教程第30期&#xff1a;UDS ISO14229统一诊断服务CAN总线专题&#xff0c;常…

【SRC实战】无限获取优惠码

挖个洞先 https://mp.weixin.qq.com/s/HgMK4S8275VvFVbnSp6Qsw “ 以下漏洞均为实验靶场&#xff0c;如有雷同&#xff0c;纯属巧合 ” 01 — 漏洞证明 “ 获取优惠码有次数限制的情况下&#xff0c;如何绕过&#xff1f;” 1、新用户专属福利&#xff0c;免费领100元优惠…

聚观早报 | 小米与京东达成合作;比亚迪销量全球第一

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 5月14日消息 小米与京东达成合作 比亚迪销量全球第一 vivo X100s关键参数曝光 小鹏汽车进军澳大利亚市场 腾讯Q…

(接上一篇linux rocky 搭建DNS高阶版)实现不同网段访问解析不同的服务器并加域

上一篇链接&#xff1a;linux rocky 搭建DNS服务和禁止AD域控DNS&#xff0c;做到独立DNS并加域-CSDN博客文章浏览阅读417次&#xff0c;点赞13次&#xff0c;收藏7次。使用linux rocky 搭建DNS服务&#xff0c;用于独立AD域控DNS存在&#xff0c;并且实现加域。https://blog.c…

vue3修改eldialog弹窗css不生效

问题&#xff1a;子组件中的eldialog没有父标签 直接使用如下是不生效的 .el-dialog{ top: 10%; } 解决&#xff1a; 加一个父标签 使用deep深度查询 .dialogClass :deep(.el-dialog) { top: 10%; } 就可以修改了

「JavaEE」多线程案例分析2:实现定时器

&#x1f387;个人主页&#xff1a;Ice_Sugar_7 &#x1f387;所属专栏&#xff1a;JavaEE &#x1f387;欢迎点赞收藏加关注哦&#xff01; 实现定时器 &#x1f349;简介&#x1f349;模拟实现定时器 &#x1f349;简介 定时器类似一个闹钟&#xff0c;时间到了之后就会执行…

java 解决跨域时遇到问题,怎么来做一个跨域环境

今天遇到一个问题&#xff1a; 关于#java#的问题&#xff1a;java 解决跨域时遇到问题&#xff1a;为什么跨域访问时配置的CorsFilter没有进入&#xff1f;直接访问请求地址时进入了配置的CorsFilter 由于没有实际的跨域环境&#xff0c;因此打算在本机建一个跨域环境&#xff…

Java 实现Mybatis plus 批量删除

数据库实体字段并不映射的情况&#xff0c;直接请求体集合接收。 PostMapping("/removeIdsInfo")public R<Void> removeIdsInfo(RequestBody List<Integer> ids) {return exStudentService.removeIdsInfo(ids);} /**** 学生模块根据集合id 批量删除数据*…

深度解析Nginx:高性能Web服务器的奥秘(下)

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《洞察之眼&#xff1a;ELK监控与可视化》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、前言 1、Nginx概述 二、Nginx核心功能 1、URL重写与重…

Springboot整合 Spring Cloud Gateway

1.Gateway介绍 1.是spring cloud官方推出的响应式的API网关框架&#xff0c;旨在为微服务架构提供一种简单有效的API路由的管理方式&#xff0c;并基于Filter的方式提供网关的基本功能&#xff0c;例如&#xff1a;安全认证&#xff0c;监控&#xff0c;限流等等。 2.功能特征…

为什么很多计算机专业的同学毕业即失业❓

✅大部分计算机专业毕业生在就业时遇到困难&#xff0c;原因往往是多方面的&#xff0c;并非普遍情况&#xff0c;主要包括以下几点&#xff1a; 1.技能不匹配&#xff1a;学校所学知识可能与实际工作需求有一定差距&#xff0c;比如缺乏特定编程语言的深入掌握或实际项目经验。…