前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Kotlin】函数 ③ ( 匿名函数 | 匿名函数的函数类型 | 匿名函数的隐式返回 )

【Kotlin】函数 ③ ( 匿名函数 | 匿名函数的函数类型 | 匿名函数的隐式返回 )

作者头像
韩曙亮
发布2023-03-30 18:36:14
3K0
发布2023-03-30 18:36:14
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

一、匿名函数


声明函数时 , 没有 函数名 的函数 是 匿名函数 ;

匿名函数 可以作为 函数参数 , 也可以作为 函数返回值 ;

匿名函数 可以 定制修改 已有的 函数 , 如 : 标准库中的函数 ;

Kotlin 中对 CharSequence 类进行了扩展 , 定义了 count(predicate: (Char) -> Boolean) 扩展函数 , 接收一个 (Char) -> Boolean 类型的函数 , 用于 返回匹配给定 匿名函数 的字符数 ;

代码语言:javascript
复制
/**
 * 返回匹配给定[谓词 predicate 匿名函数]的字符数。
 */
public inline fun CharSequence.count(predicate: (Char) -> Boolean): Int {
    var count = 0
    for (element in this) if (predicate(element)) ++count
    return count
}

代码示例 : 在下面的代码中 , 传入了 匿名函数

代码语言:javascript
复制
{ letter->
	letter == 'l'
}

作为参数 , 其作用是 返回 "Hello" 字符串中 , 字符符合 letter == 'l' 要求的字符个数 ;

代码语言:javascript
复制
fun main() {
    // 统计字符串长度
    val toalCount = "Hello".count()
    println("toalCount = $toalCount")

    // 统计字符串中 l 字符长度
    val toalLCount = "Hello".count({ letter->
        letter == 'l'
    })
    println("toalLCount = $toalLCount")
}

执行结果 :

代码语言:javascript
复制
toalCount = 5
toalLCount = 2
在这里插入图片描述
在这里插入图片描述

二、匿名函数的函数类型


匿名函数 可以作为 变量 赋值给 函数类型变量 ,

可以作为 函数参数 传递给函数 ,

因此 , 匿名函数 与 变量 一样 , 也存在 对应的 函数类型 ;

函数类型 由 参数 和 返回值 决定 ;

有 相同 参数顺序 , 参数个数 和 返回值类型 的函数 , 其 函数类型相同 ;

如上个章节 , 扩展函数 CharSequence.count 接收的匿名函数参数 predicate , 其函数类型是 (Char) -> Boolean ;

代码语言:javascript
复制
public inline fun CharSequence.count(predicate: (Char) -> Boolean): Int

代码示例 : 声明一个函数类型变量 , 然后为其赋值 , 最后执行上述函数 ;

代码语言:javascript
复制
fun main() {
    // 声明 函数类型 变量
    val helloFun: ()->String

    // 为 函数类型变量 赋值一个 匿名函数
    helloFun = {
        "Hello World"
    }

    // 执行 函数类型 变量对应的 函数
    val str = helloFun()
    println(str)
}

执行结果 :

代码语言:javascript
复制
Hello World
在这里插入图片描述
在这里插入图片描述

三、匿名函数的隐式返回


普通函数 返回值 , 都是 显示返回 , 如 : 使用 return 关键字 , 返回返回值 ;

匿名函数 的 返回值 不需要使用 return 关键字 ,

匿名函数 可以 隐式 返回 函数体最后一行语句 ;

代码示例 : 在匿名函数中 , 第一行是 Int 值 , 第二行是 Boolean 值 , 第三行是 String 值 , 最后返回的是最后一行 String 值 ;

代码语言:javascript
复制
fun main() {
    // 声明 函数类型 变量, 并为其赋值 匿名函数
    val helloFun: ()->String = {
        123
        true
        "Hello World"
    }

    // 执行 函数类型 变量对应的 函数
    println(helloFun())
}

执行结果 :

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-01-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、匿名函数
  • 二、匿名函数的函数类型
  • 三、匿名函数的隐式返回
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档