Kotlin学习笔记二十、几个常用的高阶函数

在这里插入图片描述
示例:
在这里插入图片描述

运行效果:

在这里插入图片描述

上面5个函数,推荐优先使用let、also、use这三个。

use主要用于IO操作、数据库操作等最后需要关闭的场景下,因为在“use”的内部已经帮我买处理了很多事情,比如try抛异常,比如关闭IO流:

var list:List<String>
File("KotlinDemo.iml").inputStream().reader(Charsets.UTF_8).buffered().use {
    list = it.readLines()
    println("KotlinDemo.iml的内容是:\n${list.joinToString()}")
}

list.forEach {
    println("每一行的内容是:$it")
}

结果如下:
在这里插入图片描述
在Java里面,通常有这样的场景:当某个对象不为空的时候,执行A逻辑;对象为空的时候则执行B逻辑。这时候我们通常是通过if(){ … }else{ … }来实现。
在kotlin里面,我们则是可以省去这样的麻烦,直接用上面提到的几个高阶函数来完成这样的功能需求:
我们先定义如下的一个可空变量,并不初始化:

var target:String? = null

然后执行如下逻辑:

target?.apply {
    println("target不为空时执行apply:$this")
}?: run {
    println("target为空时执行run")
}

target?.run {
    println("target不为空时执行run:$this")
}?: run {
    println("target为空时执行run")
}

target?.also {
    println("target不为空时执行also:$it")
}?: run {
    println("target为空时执行run")
}

运行效果如下:
在这里插入图片描述
可以看到,上面四个函数,都是执行了

?: run { ...... }

里面的逻辑。
现在我们再来完成对target的初始化并赋值:

target="秋水浮萍任缥缈"

然后是同样的执行上面的代码,结果如下:
在这里插入图片描述
这时,我们可以看到。四个高阶函数,分别执行的是:

?.apply { ...... }?.run { ...... }?.also { ...... }?.let { ...... }

里面的逻辑。因此我们可以总结如下:

当一个对象为空时,会执行

?: run { ...... }

里面的逻辑 ,当对象不为空时,会执行

?.apply { ...... }?.run { ...... }?.also { ...... }?.let { ...... }

里面的逻辑。通过这个,我们可以用它来实现对if(){ … }else{ … }的替代。

小结:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值