Kotlin 初阶/高阶函数
Kotlin 函数 高阶 初阶
2023-09-14 09:13:58 时间
匿名函数
使用匿名函数扩展某些内置函数的功能
这里扩展了 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)
}
返回值为函数类型的函数
大无语了套娃函数;
代码解释
- f1 接收一个参数,并且返回一返回值为 string 类型的匿名函数
- getStr 获取了函数签名,故 f1 没有被基于参数!
- getStr(“i”)表示赋予 f1 参数值 i
- getStr(“i”)(“it”) 因为执行完第三步后就会返回一个匿名函数,此时我们就需要再对该匿名函数传入一个参数,才能正确运行
fun main() {
val getStr = ::f1
println(getStr("i")("it"))
}
private fun f1(name: String): (String) -> String {
return { str ->
"$name like $str"
}
}
相关文章
- kotlin基础
- [Kotlin] Adding functions to existing classes (extension functions)
- [Kotlin Unit test] Spek & Mock
- Kotlin 朱涛-1 基础语法 变量 类型 函数 流程控制
- Kotlin 朱涛-15 协程 挂起函数 suspend CPS Continuation
- Kotlin 朱涛-14 协程 启动 调试 launch async
- 熬夜再战Android之修炼Kotlin-【Kotlin的static是什么】
- Android kotlin 系列讲解(基础篇) 两个不同的关键字变量声明 - var和val
- Android kotlin 系列讲解(基础篇) 带返回值函数的小技巧
- Kotlin基础从入门到进阶系列讲解(入门篇)Toast的使用
- Android kotlin的匿名函数和Lambda 表达式8种写法
- Kotlin 扩展函数与属性 实例代码
- 揭秘Kotlin编程精华,讲干货、不废话:《Kotlin从入门到进阶实战》 阿里巴巴资深程序员力作...
- Kotlin 并发编程之"协程"
- 7. 面向对象编程思想(OOP)【Kotlin 极简教程】
- Kotlin 函数式编程(Kotlin Functional Programming)
- 《Kotlin项目实战开发》第5章 函数与函数式编程
- Kotlin 函数编程详解
- 《Kotlin 程序设计》第六章 Kotlin 函数式编程(FP)
- 《Kotlin极简教程》第六章 Kotlin函数式编程(FP)
- 【Kotlin 协程】协程中的多路复用技术 ② ( select 函数原型 | SelectClauseN 事件 | 查看挂起函数是否支持 select )
- 【Kotlin 协程】Flow 异步流 ⑤ ( 流的上下文 | 上下文保存 | 查看流发射和收集的协程 | 不能在不同协程中执行流的发射和收集操作 | 修改流发射的协程上下文 | flowOn函数 )
- 【Kotlin 协程】协程启动 ③ ( 协程组合并发 | 挂起函数串行执行 | 协程组合并发执行挂起函数 )
- Kotlin — 介绍各类异步程序设计
- Kotlin基础学习第6章—高阶函数
- android kotlin基础-- 变量 函数 数据类型