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

Kotlin学习第三课

Kotlin常见标准库函数。

1.apply:你可以传入一个接受者,然后调用一系列函数来配置它以便使用。

没有使用apply

val menuFile = File("menu-file.txt")
menuFile.setReadable(true)
menuFile .setWritable(true)

使用apply

​
val menuFile = File("menu-file.txt").apply {
    setReadable(true)
    setWritable(true)
}


​

2.let:let函数能使某个变量作用于lambda表达式里,让it关键字能引用它。

没有使用let

val fitstElement = listOf(1,2,3).first()
val firstItemSquared = fitstElement * fitstElement 

使用let函数

​
val firstItemSquared = listOf(1,2,3).first().let {
    it*it
}

​

3.run:run和apply函数差不多,但与apply不同,run函数不返回接受者。

假设你想看某个文件是否包含某一个字符串:

val menuFile = File("menu-file.txt")
val serverDragonBreath = menuFile.run {
    readText().contains("Dragon's Breath")
}

run返回的是lambda结果,也就是true或者false。

4.with:with函数时run函数的变体,他们的功能都一样,但是调用的方式不一样,调用with时需要值参作为其第一个参数传入。

val nameTooLong = with ("Polarcubis,Supreme master of NyetHack") {
    length >= 20
}

可以看到参数的传入,然后也是返回true或者false。

5.also:also函数和let函数有些像,和let一样,also也是把接受者作为值参数传给lambda。但有一点不同、:also返回接受者对象,而let返回lambda结果。

6.takeIf:takeIf函数需要判断lambda中提供的条件表达式,给出true或者false,如果判断结果为true,从takeIf函数返回接受者对象,如果为false,则返回null。

当文件可读可写时,才读取文件内容。

不适用takeIf

val file = File("myfile.txt")
val fileContents = if(file.canRead() && file.canWrite()) {
    file.readText()
} else {
    null
}

使用takeIf

val fileContents = File("myfile.txt")
.takeIf { it.canRead() && it.canWrite() }
?.readText()

7.takeUnless,takeUnless和takeIf唯一的区别是,只有判断你给定的条件结果是false时,takeUnless才会返回原始接受者对象,建议使用takeIf而不是takeUnless。


http://www.kler.cn/a/372356.html

相关文章:

  • Oracle Managed Files(OMF)
  • 【Unity3D】ECS入门学习(七)缓存区组件 IBufferElementData
  • OpenCV相机标定与3D重建(35)计算两幅图像之间本质矩阵(Essential Matrix)的函数findEssentialMat()的使用
  • 【089】基于51单片机环境监测系统【Proteus仿真+Keil程序+报告+原理图】
  • C程序设计:数据在数组中的交换
  • hiprint结合vue2项目实现静默打印详细使用步骤
  • WPF入门_07模板控件
  • 2. STM32 HAL库MDK工程模板创建
  • JavaFx -- chapter05(多用户服务器)
  • C++ 模板专题 - 标签分派(Tag Dispatching)
  • Spring Boot与Web技术的酒店客房服务管理系统
  • 深入理解C++ Lambda表达式:语法、用法与原理及其包装器的使用
  • 智能进化:强化学习如何模拟自然选择,揭示适应性优化的秘密
  • 利用kimi编程助手从0到1开始搭建小程序!
  • 贷中额度策略调整
  • 智能网关有什么用处
  • Ubuntu系统安装软件
  • Spring原理
  • 基于Spring Boot+Unipp的卤肉店小程序(图形化分析)
  • trueNas 24.10 docker配置文件daemon.json无法修改(重启被覆盖)解决方案
  • HBuilder X 中Vue.js基础使用4->表单输入绑定(三)
  • 【数据结构与算法】之队列详解
  • MFC工控项目实例二十七添加产品参数
  • DRC-20开发指南:新一代区块链代币标准
  • 微信小程序面试题全攻略:10 大板块深度解析,附丰富案例代码
  • 2024-网鼎杯第二次模拟练习-web02