高阶函数
- 定义 函数参数或者返回值为一个函数的 函数成为高阶函数
- 需求 当调用一个函数时 特定情况需要去完成其它的功能
/**
* 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 加载成功...数据"
}








网友评论