Kotlin 初阶/高阶函数

匿名函数

使用匿名函数扩展某些内置函数的功能

这里扩展了 count 的功能,现在表示获取字符串中字符 e 出现的次数

fun anonymous(){
    val total:Number = "hello".count { letter ->
        letter == 'e'
    }
    println(total)
}

带返回值匿名函数

类似于 js 的箭头函数;

箭头指向的为匿名函数返回值类型;

括号里面可以写任意长语句,但是最后一行就作为返回值,且 不可以用 return!!!

val getName:()->String={
    val str:String = "str"
    "hello$str"
}

带参的匿名函数

同上,只不过你需要在小括号里面声明后续使用参数的类型(注意仅需要声明类型即可!!!)

(Int) 声明参数类型
-> Int 匿名函数返回值类型
num -> 参数名称为 num,我们可以使用它
12 + num 返回值

val getAge: (Int) -> Int = { num ->
        12 + num
    }

it 关键字

当且仅当只有一个参数时,在函数体里面直接使用 it 指代该参数

因为 it 可以直接指代参数,所以不需要在写诸如 it-> 这玩意了

val getName: (String) -> Unit = {
        println(it)
    }

类型推断

你可以省去匿名函数前面的语法糖,但是参数名与参数类型绝对要存在;

该方法可以让 kotlin 自动推断返回值类型

val getStr = { name: String, age: Int ->
    "name: $age"
}
println(getStr("tom", 12))

lambda

定义一个参数是函数的函数

fun main() {
    // 定义一个匿名函数
    val getAge = { nums: Int -> nums }
    // 调用参数是函数的函数
    println(useFunc("tom", getAge))
}

// 第二个参数是一个函数,可以把它看做是一个函数签名
fun useFunc(name: String, func: (Int) -> Int): String {
    return "$name + ${func(12)}"
}

当然我们还有一个简略写法;

当一个参数是函数的函数中,有且仅有一个函数参数且是最后一个参数时,调用时直接在大括号内写函数体;

fun main() {
    // 这里的大括号就对应最后一个参数func的函数体,他是一个匿名函数!!!
    useFunc("tom") { nums: Int ->
        nums
    }
}

fun useFunc(name: String, func: (Int) -> Int) {
    println("$name + ${func(12)}")
}

函数引用

脱裤子放屁;

使用双冒号后跟着函数名,就可以引用该函数了,避免了直接写函数占用太多空间

fun main() {
    // 双冒号引用函数,注意该函数不能是匿名函数!!!
    // 类似val xxx = {} 这玩意不能引用!
    f2("tom", ::f1)
}

// 被引用的函数
fun f1(s: String, i: Int): Unit {
    println("$s + $i")
}

private fun f2(name: String, func: (String, Int) -> Unit) {
    func(name, 12)
}

返回值为函数类型的函数

大无语了套娃函数;

代码解释

  1. f1 接收一个参数,并且返回一返回值为 string 类型的匿名函数
  2. getStr 获取了函数签名,故 f1 没有被基于参数!
  3. getStr(“i”)表示赋予 f1 参数值 i
  4. getStr(“i”)(“it”) 因为执行完第三步后就会返回一个匿名函数,此时我们就需要再对该匿名函数传入一个参数,才能正确运行
fun main() {
    val getStr = ::f1
    println(getStr("i")("it"))
}

private fun f1(name: String): (String) -> String {
    return { str ->
        "$name like $str"
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zhillery

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值