0
点赞
收藏
分享

微信扫一扫

Kotlin中Lambda的使用于理解:匿名函数 == Lambda 表达式

Raow1 2022-02-03 阅读 65

Kotlin中Lambda的使用于理解:匿名函数 == Lambda 表达式

fun main(args: Array<String>) {
    //匿名函数 == Lambda 表达式
    val addResultMethod = { number1: Int, number2: Int ->
        "两数相加之和:${number1 + number2}"
    }//addResultMethod:(Int, Int)->String
    println(addResultMethod(55, 22))

    //匿名函数 入参Int,    返回 Any类型
    //lambda表达式的参数Int,  lambda表达式的结果Any类型
    val weekResultMethod = { number: Int ->
        when (number) {
            1 -> "星期一"
            2 -> "星期二"
            3 -> "星期三"
            4 -> "星期四"
            5 -> "星期五"
            6 -> "星期六"
            7 -> "星期日"
            else -> -1
        }
    }//weekResultMethod:(Int)->Any
    println(weekResultMethod(4))
    /*----------------------------------------------------*/
    val serverResponse = { responseMsg: String, responseCode: Int ->
        println("最终拿到服务器响应的结果是:responseMsg:$responseMsg, responseCode:$responseCode")
    }
    doLogin("yuknight", "123456", serverResponse)
    /*----------------------------------------------------*/
    doLogin("yuknight", "123456") { responseMsg: String, responseCode: Int ->
        println("最终拿到服务器响应的结果是:responseMsg:$responseMsg, responseCode:$responseCode")
    }
    /*----------------------------------------------------*/
    //lambda函数返回值为String
    val serverResponse1 = { responseMsg: String, responseCode: Int ->
     println("lambda函数返回值为String" +
             "最终拿到服务器响应的结果是:responseMsg:$responseMsg, responseCode:$responseCode")
  "lambda函数返回值为String 最终拿到服务器响应的结果是:responseMsg:$responseMsg, responseCode:$responseCode"
//        println("最终拿到服务器响应的结果是:responseMsg:$responseMsg, responseCode:$responseCode")

    }
    doLogin1("yuknight", "123456",serverResponse1)
    /*----------------------------------------------------*/
    val responseMsg = {
            msg: String, code:Int->
        println("返回结果:msg:$msg, code:$code")
    }
    loginApi("yuknight", "123456", responseMsg)
    /*----------------------------------------------------*/
    loginApi("yuknight", "123456"){
          msg: String, code:Int->
        println("返回结果:msg:$msg, code:$code")
    }

}

//函数中定义参数是函数的函数
const val DB_SAVE_USER_NAME = "yuknight"
const val DB_SAVE_USER_PWD = "123456"

fun doLogin(userName: String, userPwd: String, serverResponse: (String, Int) -> Unit) {
    if (DB_SAVE_USER_NAME == userName && DB_SAVE_USER_PWD == userPwd) {
        val serverResponseResult = "恭喜,登录成功!"
        serverResponse(serverResponseResult, 200)
    } else {
        val serverResponseResult = "对不起,登录失败!"
        serverResponse(serverResponseResult, 404)
    }
}
/*----------------------------------------------------*/
fun doLogin1(userName: String, userPwd: String, serverResponse: (String, Int) -> String) {
    if (DB_SAVE_USER_NAME == userName && DB_SAVE_USER_PWD == userPwd) {
        val serverResponseResult = "恭喜,登录成功!"
        serverResponse(serverResponseResult, 200)
    } else {
        val serverResponseResult = "对不起,登录失败!"
        serverResponse(serverResponseResult, 404)
    }
}

/*----------------------------------------------------*/
fun loginApi(userName: String, userPwd: String, responseResult: (String, Int) -> Unit) {
    if (userName == null || userPwd == null) {
        responseResult("用户名或者密码错误", 500)
    }
    if (userName.length>3 &&userPwd.length>3){
        if (wbeServiceLoginApi(userName, userPwd)){
            responseResult("login sucess", 200)
        }else{
            responseResult("login fail", 444)
        }
    }else {
        responseResult("用户名或者密码错误", 500)
    }
}

private fun wbeServiceLoginApi(name:String, pwd:String):Boolean{
    //Kotlin中if是表达式, java中if是语句
    return name == DB_SAVE_USER_NAME && pwd == DB_SAVE_USER_PWD
}

//java 中则需要使用匿名函数以及回调的方式实现
//interface ResponseResult{
//     void result(String msg, int code);
//}
举报

相关推荐

0 条评论