美文网首页
Kotlin高阶函数和lambda表达式

Kotlin高阶函数和lambda表达式

作者: 爱写代码的小王子 | 来源:发表于2020-07-16 18:18 被阅读0次

高阶函数

  • 定义 函数参数或者返回值为一个函数的 函数成为高阶函数
  • 需求 当调用一个函数时 特定情况需要去完成其它的功能
/**
 * Higher-order Functions 高阶函数
 * 函数参数或者返回值为一个函数的 函数成为高阶函数
 * */
fun B(b: Any): Any {
    //...执行代码
    return "result"
}
fun A(a: Any) {
    //...执行代码,获取数据
    //调用B函数
    B(a)
}
  • 将函数作为参数传递,以满足不确定功能的需要
fun login(user: Any, funParm: (Int) -> String) {
    //...登录
    //调用传递过来的功能函数
    funParm(1)
}
fun exit(name: String, funParm: (Int) -> String) {
    //...退出
    val id = 1
    //进一步操作
    funParm(id).also {
        println(it)
    }
}
//具体调用
//函数直接作为参数传递过去
    exit("jack") { id: Int -> String
        "得到id为:$id 处理自己的事情"
    }
  • 通过变量调用函数和通过函数对象来调用
fun loadHomeData(id: Int): String {
    return "用户具体信息"
}

fun saveUserInfo(id: Int): String {
    return "保存用户成功"
}

//函数名仅仅是这个函数的名称
//函数名前加 :: 表示这个函数的对象
var funA = ::loadHomeData
var funB = ::saveUserInfo

fun main() {
    //通过变量调用函数
    funA(10).also { println(it) }
    funB(20).also { println(it) }
    //通过函数对象来调用
    (::loadHomeData)(10).also { println(it) }
    (::saveUserInfo).invoke(20).also { println(it) }

}
  • 匿名函数
//函数作为对象赋值给其它变量 不要函数名
var funC = fun(_ : Int): String {
    println("保存主页数据")
    return "保存成功....数据"
}

lambda表达式

注意如果函数有返回值 不能使用return 默认返回最后一行内容

  • lambda表达式 匿名函数
/**
 * 函数使用大括号括起来{
 * 函数的参数 -> 返回类型
 * 函数体body}
 * */
  • 匿名函数无参数
//{} -> unit 表示函数没有返回值
var funD = {
    println("函数主体...执行要做的事")
}
  • 匿名函数有参数 有返回值
//(Int,Int) -> Int 参数均为Int类型 返回值也是Int 类型
var funE = { a: Int,b: Int -> Int
    a + b
}
//(Int) -> String 参数只有一个 Int类型 返回值为String  类型
var funF = { id: Int -> String
    println("加载主页数据")
    "$id 加载成功...数据"
}

相关文章

网友评论

      本文标题:Kotlin高阶函数和lambda表达式

      本文链接:https://www.haomeiwen.com/subject/inzjhktx.html