KotLin 高阶函数 笔记

本篇主要是用于学习Kotlin 时  记录一些关于代码的理解 

一 将函数类型作为参数 

private fun test(a:Int, b:(num1:Int, num2:Int)->Int):Int{
        return a+b.invoke(3,5);
}
定义一个函数 参数为 a int类型,b 是一个函数 类型 并且该函数 
参数必须为两个int 返回值必须为int 至于里面怎么操作 看你传入的函数来定 

如何调用 

test(1,{a,b->a-b}
这里{} 里面即定义了一函数 ,参数为 a,b 当然这两个变量可以随便起 。
箭头后面是你函数内部的执行逻辑 你可以相加 相乘 总之 这两个变量为int 
你的计算结果也必须为int 
相当于test 搞了一个函数 参数 限定了 这个函数 的返回值和参数 至于这个函数
怎么计算 由调用者决定

二 函数作为返回值

 fun getNum(type: Int): (lo: Int) -> Int {
        if (type == 1) {
            return { prin -> prin + prin }
        } else {
            return { num -> num * num }
        }
    }

定义一个函数 返回值为一个函数。。 这个函数的参数为int。返回值为int。这个返回的函数内部的逻辑
在return 里面实现 。。。如果type 是1 则是一个相加的函数 
如果不是1 是一个相乘的函数 
lo 为参数名。prin。num 都是 参数名 他们指代的都是 函数参数 起什么名字都无所谓 


如何使用

  var function = getNum(1);//返回了一个函数。。。 
  var result = function(1); //调用这个返回的函数 得到一个int 值

三 apply 函数 

textView?
.apply { 
setText("123") 
}
.apply { 
setOnClickListener(
{ 
Toast.makeText(applicationContext
            ,"",Toast.LENGTH_LONG).show()
}) }
apply 函数返回了调用者自身 所以可以链式 调用。。 分布执行逻辑 

四 Let 函数 

        val original = "abc"

        original.let {
            Log.i("xx",it);  abc
            it.reversed() // 改变值传递到下一链条
        }.let {
            Log.i("xx",it); cab
            it.length   // 改变类型
        }.let {
            Log.i("xx","xxx$it“); 3 
        }      

let 函数 返回的是调用者本身 计算以后的值。。 会改变。 

五 also 函数 

also 函数与 apply 差不多 

also 也是返回自身 与let不同 let 会返回改变的值  所以 可以利用 let 与also 结合  比如 

fun makeDir(path: String) = path.let{
        File(it)
    }.let{
        it.mkdirs()
    }

如果都用let。那么这个函数的返回值 就是bool。因为最后一步 是it.mkdirs. 这个计算的结果是boolean
但是如果你还想要file 对象 可以改成

 fun makeDir(path: String) = path.let{
        File(it)
    }.also{
        it.mkdirs()
    }
这样 also 返回的还是 file 对象。

 

六 T.run 函数。

fun runTest(path:String)=   
    path?.
    run {
    
    var a=1+2
    a
    }.
    run {
       Log.i("xx","最后一个是$this")// this 就是a 所以输出 3
    }
T.run 返回的是 范围内最后一个对象 所以 这里第二个run 的this 其实是a  
T.run 可以对T 进行非空校验 

推荐一个写的非常好的 博客 里面 解释的很详细。  

https://juejin.im/post/6844903554625323015

盗用下 上面的图 对这些函数 如何取舍 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值