知识点
25.Kotlin语言的函数参数学习
26.Kotlin语言的it关键字特点
27.Kotlin语言的匿名函数的类型推断
28.Kotlin语言的lambda学习
29.在函数中定义参数是函数的函数
30.Kotlin语言的简略写法学习
31.Kotlin语言的函数内联学习
32.Kotlin语言的函数引用学习
33.Kotlin语言的函数类型作为返回类型
34.Kotlin语言的匿名函数与具名函数
内置函数和举例
计算字符个数
val len2 = "Davidaaa".count{
it == 'a'
}
println(len2)
函数的隐式返回
val methodAction: () -> String = {
"methodAction"
}
println(methodAction())
---------
val methodAction: (Int, Int, Int) -> String = { n1, n2, n3 ->
"methodAction ${n1},${n2},${n3}"
}
println(methodAction(1,2,3))
匿名函数推断
val method1 = {v1:Double,v2:Float,v3:Int->
"v1:$v1,v2:$v2,v3:$v3"
}
println(method1(33.0,34.5f,44))
val method2={
444.44f
}
val method3={number:Int->
number
}
上面的匿名函数也是Lambda
val resultMethod = {number:Int->
when(number){
1->"1111111"
2->"2222222"
else -> -1
}
}//(Int)->Any
lambda 的表达式结果是Any类型
参数是函数的函数
const val USER_NAME = "aaaa"
const val PASSWD_VALUE = "cccccccccc";
// 在Java中responseResult 应该是传入的接口
fun loginAPI(username: String, userpwd: String, responseResult: (String, Int) -> Unit) {
if (username == null || userpwd == null) {
TODO("username or passwd null")
}
if (username.length > 3 && userpwd.length > 6) {
if(webServiceLoginAPI(username,userpwd)){
responseResult("login success",200)
}
} else {
TODO("useranme and password is error")
}
}
fun webServiceLoginAPI(name:String,pwd:String):Boolean{
return name == USER_NAME && pwd == PASSWD_VALUE
}
三种方式
loginAPI("aaaa","cccccccccc"){msg:String,code:Int->
println("message:${msg},code:${code}")
}
loginAPI("aaaa","cccccccccc",{
msg:String,code:Int->
println("message:${msg},code:${code}")
})
loginAPI("aaaa","cccccccccc") { msg: String, code: Int ->
println("message:${msg},code:${code}")
}
内联
由于会生成多个对象,完成lambda表达式
使用内联之后,相当于C++ 的#define,把对象调用消除,把代码替换到调用处优化效率
如果参数有lambda,尽量用inline,减少对像和函数的空间开辟
函数引用
Lambda 属于函数类型的对像
::函数
函数类型的返回值
fun show(info:String):Boolean{
println("我是show method;${info}")
return true
}
fun showMethod(info:String):(String,Int)->String{
println("我是show method;${info}")
return { name:String,age:Int->
"返回匿名函数${name},${age}"
}
}
fun showMethod2(info:String):String{
println("我是show method;${info}")
return "TODO"
}
调用----------
val method = showMethod("info ing")
println(method("zhangsan",100))
匿名函数和具名函数
fun showResultImpl(result: String) {
println("具名函数:${result}")
}
inline fun showPersonInfo(name:String,age:Int,showResult:(String)->Unit){
var str = "$name is $age in study"
showResult(str)
}
调用----------
val method = showMethod("info ing")
println(method("zhangsan",100))
showPersonInfo("lisi",99){
println(it)
}
showPersonInfo("wangwu",444,::showResultImpl)