【Kotlin】函数 ③ ( 匿名函数 | 匿名函数的函数类型 | 匿名函数的隐式返回 )
文章目录
一、匿名函数
声明函数时 , 没有 函数名 的函数 是 匿名函数 ;
匿名函数 可以作为 函数参数 , 也可以作为 函数返回值 ;
匿名函数 可以 定制修改 已有的 函数 , 如 : 标准库中的函数 ;
Kotlin 中对 CharSequence
类进行了扩展 , 定义了 count(predicate: (Char) -> Boolean)
扩展函数 , 接收一个 (Char) -> Boolean
类型的函数 , 用于 返回匹配给定 匿名函数 的字符数 ;
/**
* 返回匹配给定[谓词 predicate 匿名函数]的字符数。
*/
public inline fun CharSequence.count(predicate: (Char) -> Boolean): Int {
var count = 0
for (element in this) if (predicate(element)) ++count
return count
}
代码示例 : 在下面的代码中 , 传入了 匿名函数
{ letter->
letter == 'l'
}
作为参数 , 其作用是 返回 "Hello"
字符串中 , 字符符合 letter == 'l'
要求的字符个数 ;
fun main() {
// 统计字符串长度
val toalCount = "Hello".count()
println("toalCount = $toalCount")
// 统计字符串中 l 字符长度
val toalLCount = "Hello".count({ letter->
letter == 'l'
})
println("toalLCount = $toalLCount")
}
执行结果 :
toalCount = 5
toalLCount = 2
二、匿名函数的函数类型
匿名函数 可以作为 变量 赋值给 函数类型变量 ,
可以作为 函数参数 传递给函数 ,
因此 , 匿名函数 与 变量 一样 , 也存在 对应的 函数类型 ;
函数类型 由 参数 和 返回值 决定 ;
有 相同 参数顺序 , 参数个数 和 返回值类型 的函数 , 其 函数类型相同 ;
如上个章节 , 扩展函数 CharSequence.count
接收的匿名函数参数 predicate
, 其函数类型是 (Char) -> Boolean
;
public inline fun CharSequence.count(predicate: (Char) -> Boolean): Int
代码示例 : 声明一个函数类型变量 , 然后为其赋值 , 最后执行上述函数 ;
fun main() {
// 声明 函数类型 变量
val helloFun: ()->String
// 为 函数类型变量 赋值一个 匿名函数
helloFun = {
"Hello World"
}
// 执行 函数类型 变量对应的 函数
val str = helloFun()
println(str)
}
执行结果 :
Hello World
三、匿名函数的隐式返回
普通函数 返回值 , 都是 显示返回 , 如 : 使用 return
关键字 , 返回返回值 ;
匿名函数 的 返回值 不需要使用 return
关键字 ,
匿名函数 可以 隐式 返回 函数体最后一行语句 ;
代码示例 : 在匿名函数中 , 第一行是 Int
值 , 第二行是 Boolean
值 , 第三行是 String
值 , 最后返回的是最后一行 String
值 ;
fun main() {
// 声明 函数类型 变量, 并为其赋值 匿名函数
val helloFun: ()->String = {
123
true
"Hello World"
}
// 执行 函数类型 变量对应的 函数
println(helloFun())
}
执行结果 :
相关文章
- kotlin的Map集合
- 那些年,Kotlin 都截胡了哪些 Java 新特性
- 基于kotlin开发的验证码发送注册的app
- 【Kotlin】Kotlin 语言基础 ( 环境安装 | 变量 | 简单使用 | 函数 | 异常 | 递归 )
- 【Kotlin】Kotlin 领域特定语言 DSL 原理 二 ( 中缀表达式 )
- 【Kotlin】Kotlin 类的继承 二 ( 属性覆盖 | 属性覆盖的四种情况 | 常量 / 变量 属性覆盖 | 子类初始化与属性覆盖 )
- 【Kotlin】扩展函数 ( 扩展函数声明 | 调用方式 | 与成员函数优先级 | 接收者空值处理 )
- JetBrains首席语言设计师:我们将如何让Kotlin再活几十年
- 【Kotlin 协程】协程异常处理 ② ( SupervisorJob 协程 | supervisorScope 协程作用域构建器函数 )
- 【Kotlin】函数 ② ( Unit 函数 | TODO 函数抛出异常返回 Nothing 类型 | 反引号函数名 )
- 【Kotlin】函数 ④ ( 匿名函数参数 | 匿名函数 it 关键字 )
- 【Kotlin】函数 ⑤ ( 匿名函数变量类型推断 | 匿名函数参数类型自动推断 | 匿名函数又称为 Lambda 表达式 )
- 【Kotlin】空安全总结 ( 变量可空性 | 手动空安全管理 | 空安全调用操作符 | 非空断言操作符 | 空合并操作符 | 空指针异常处理 | 先决条件函数判空 )
- 【Kotlin】字符串操作 ② ( 字符串替换函数 replace | 字符串比较操作符 == 和 === | 字符串遍历 forEach )
- 【Kotlin】类的初始化 ② ( 主构造函数 | 主构造函数定义临时变量 | 主构造函数中定义成员属性 | 次构造函数 | 构造函数默认参数 )
- 【错误记录】Kotlin 代码运行时报错 ( 成员属性初始化顺序是按照从上到下顺序进行的 , 上面的属性不要调用下面未进行初始化的属性 )
- 【Kotlin】常用的 Kotlin 类 ① ( 嵌套类 | 数据类 | 数据类 copy 函数 | 数据类解构声明 operator fun component1 | 数据类运算符重载 )
- 【Kotlin】扩展函数总结 ★ ( 超类扩展函数 | 私有扩展函数 | 泛型扩展函数 | 扩展属性 | 定义扩展文件 | infix 关键字用法 | 重命名扩展函数 | 标准库扩展函数 )