kotlin中的匿名函数&Lambda

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kotlin中的匿名函数&Lambda相关的知识,希望对你有一定的参考价值。

参考技术A 1.匿名函数定义:匿名函数是指的没有函数名字的函数,例子如下:

fun main()

val len ="kiiiing".count();

println(len)

val len2 ="kiiiing".count

        it =='i'

   

    println(len2)



其中的"kiiiing".count 就是匿名函数,相当于一个表达式,有返回值,这个匿名函数内部是类型为char,变量名为it的字符,相当于把kiiing字符串分解

2.匿名函数的类型和隐式返回

例子如下:

fun main()

//函数输入输出的声明

    val methodAction :() ->String

    //对上面函数的实现,这里是匿名函数,匿名函数没有返回值,即不需要写return,最后一行就是返回的内容

    methodAction =

          "hello"

   

    println(methodAction())



3.匿名函数参数的学习

对比上面拆解的方式定义一个匿名无参函数,下面是一个整合形式的有参匿名函数的定义:

fun main()

    val methodAction :(Int,Int,Int) ->String = n1, n2, n3->

        "value is $n1,$n2,$n3"

   

    println(methodAction(1,2,3))



4.匿名函数中it关键字的学习

fun main()

//如果定义了一个参数的匿名函数,默认it参数名字

    val methodAction2 : (String) ->String =

it





5.匿名函数的类型推断

fun main()

//匿名函数的返回值推断

    val methdFunction = v1:Double, v2:Float, v3:Int ->

          ""

   



6.lambda的学习

fun main()

//匿名函数 == lambda表达式

    val addNumResult = number:Int, number2:Int ->

        "两数相加的和:$number + number2"

   

    println(addNumResult(3,5))

//匿名函数返回Any类型,lambda表达式的参数Int, lambda表达式结果Any类型

    val weekResumtMethod = number:Int ->

        when(number)

1 ->"星期一"

            2 ->"星期二"

            3 ->"星期三"

            4 ->"星期四"

            5 ->"星期五"

            else -> -1

       



    println(weekResumtMethod(3))



7.匿名函数中参数是函数的函数

fun main()

loginApi("king","1234",responseResult = reason:String,code:Int ->

        println("登陆情况$reason")

)



const val USER_NAME_SAVE_DB ="king"

const val USER_NAME_SAVE_PWD ="1234"

fun loginApi(username:String, userpassword:String, responseResult :(String,Int) ->Unit)

if(username ==null || userpassword ==null)

TODO("用户名密码为空")//出现问题,终止程序

   

if(username.length >3 && userpassword.length >3)

if(webServiceLoginApi(username,userpassword))

//登陆成功

              responseResult("login success",200);

else

//登陆失败

              responseResult("login failed",400);



else

TODO("用户名密码不合格")





private fun webServiceLoginApi(name:String,passowrd:String) :Boolean

return if(name ==USER_NAME_SAVE_DB && passowrd ==USER_NAME_SAVE_PWD)

true

    else

false

   



8.匿名函数参数是函数的函数的简化写法

fun main()

//第一种写法

    loginApi2("king","1234", reason:String,code:Int ->

        println("登陆情况$reason")

)

//第二种写法

    loginApi2("king","1234",responseResult = reason:String,code:Int ->

        println("登陆情况$reason")

)

//第三种方式

    loginApi2("king","1234") reason:String,code:Int ->

        println("登陆情况$reason")





9.匿名函数的内联学习

--如果一个函数的参数没有lambda,就不需要声明成内联

--如果一个函数的参数有lambda表达式

(1)如果一个函数不使用内联,在使用前会生成多个对象来完成lambda的调用

(2)如果一个函数使用内联,相当于c++中的宏定义,宏替换

结论:如果函数参数有lambda,尽量使用incline关键帧,内部会做优化,减少函数,对象开辟的损耗

10.函数引用

函数引用是指 把普通函数 变成 函数类型的对象

::函数名 可以转换成对象,一个函数lambda参数

fun main()

loginApi("king","1234",::excuteResponseResult)



fun excuteResponseResult(reason:String,code:Int)

println("success")



const val USER_NAME_SAVE_DB4 ="king"

const val USER_NAME_SAVE_PWD4 ="1234"

fun loginApi3(username:String, userpassword:String, responseResult :(String,Int) ->Unit)

if(username ==null || userpassword ==null)

TODO("用户名密码为空")//出现问题,终止程序

   

if(username.length >3 && userpassword.length >3)

responseResult("login success",200);

else

TODO("用户名密码不合格")





11.函数类型作为返回类型

fun main()

show("")



fun show(value:String) : (String,Int) ->String

return name:String,age:Int ->

        ""

   

以上是关于kotlin中的匿名函数&Lambda的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin中匿名函数(又称为Lambda,或者闭包)的详解

Kotlin中匿名函数(又称为Lambda,或者闭包)和高阶函数的详解

深刻理解 Kotlin高阶函数匿名函数以及lambda表达式

深刻理解 Kotlin高阶函数匿名函数以及lambda表达式

深刻理解 Kotlin高阶函数匿名函数以及lambda表达式

kotlin的匿名函数知识点总结