0
点赞
收藏
分享

微信扫一扫

Kotlin基础学习 05

小沙坨 2022-04-13 阅读 92
kotlin

1.Kotlin语言中的简略语法学习

// TODO 29  Kotlin语言中的简略语法学习
fun main() {
    //第一种方式
    loginAPI2("bxxb","123456"){ msg : String,code : Int ->
        println("登录结果如下:msg:$msg,code:$code")
    }
    //第二种方式
    loginAPI2("bxxb","123456"){ msg : String ,code : Int ->
        println("登录结果如下:msg:$msg,code:$code")
    }
    //第三种方式
    loginAPI2("bxxb","123456", responseResult =  { msg : String ,code : Int ->
        println("登录结果如下:msg:$msg,code:$code")
    })
}
//模拟数据库SQLServer
const val USER_NAME_SAVE_DB2 = "bxxb"
const val USER_PWD_SAVE_DB2 = "123456"

//登录API 模仿前端
public fun loginAPI2(username : String, userpwd : String,responseResult : (String , Int) -> Unit){
    if(username == null || userpwd == null){
        TODO("用户名或密码为空") //出现问题程序终止
    }
    //前端校验
    if (username.length > 3 && userpwd.length > 3){
        if(webServiceLoginAPI2(username,userpwd)){
            //登录成功
            responseResult("login success",200)
        }else{
            //登录失败
            responseResult("login error",444)
        }
    }else{
        TODO("用户名和密码违规")
    }
}
//登录API 服务器
private fun webServiceLoginAPI2(name : String,pwd : String) : Boolean{
    return name == USER_NAME_SAVE_DB && pwd == USER_PWD_SAVE_DB
}

输出结果为:

2.Kotlin语言的函数内联学习

// TODO 30  Kotlin语言的函数内联学习
fun main() {

    //第三种方式
    loginAPI3("bxxb","123456", responseResult =  { msg : String ,code : Int ->
        println("登录结果如下:msg:$msg,code:$code")
    })
}
//模拟数据库SQLServer
const val USER_NAME_SAVE_DB3 = "bxxb"
const val USER_PWD_SAVE_DB3 = "123456"

//登录API 模仿前端
//此函数有使用lambda作为参数,就需要声明成内联
//如果此函数,不使用内联,在调用端,会生成多个对象来完成lambda的调用(会造成性能损耗)
//如果此函数,使用内联,相当于 C++ #define 宏定义 宏替换 会把代码替换到调用处,调用处没有任何函数开辟,对象开辟的损耗
//小结:如果函数参数有lambda,尽量使用 inline 关键字,这样内部会做优化,减少 函数开辟 对象开辟的损耗
public inline fun loginAPI3(username : String, userpwd : String,responseResult : (String , Int) -> Unit){
    if(username == null || userpwd == null){
        TODO("用户名或密码为空") //出现问题程序终止
    }
    //前端校验
    if (username.length > 3 && userpwd.length > 3){
        if(webServiceLoginAPI3(username,userpwd)){
            //登录成功
            responseResult("login success",200)
        }else{
            //登录失败
            responseResult("login error",444)
        }
    }else{
        TODO("用户名和密码违规")
    }
}
//此函数没有使用lambda作为参数,就不需要声明成内联
//登录API 服务器
 fun webServiceLoginAPI3(name : String,pwd : String) : Boolean{
    return name == USER_NAME_SAVE_DB && pwd == USER_PWD_SAVE_DB
}

3.Kotlin语言的函数引用学习

// TODO 31  Kotlin语言的函数引用学习
fun main() {
    //函数引用
    //lambda属于函数类型的对象,需要把methodResponseResult普通函数变成 函数类型的对象(函数引用/也就是加上帽帽::)
    login("bxxb","123456",::methodResponseResult)
}
fun methodResponseResult(msg : String , code : Int){
    println("最终的登录结果是msg:$msg,code:$code")
}
//模拟数据库SQLServer
const val USER_NAME_SAVE_DB4 = "bxxb"
const val USER_PWD_SAVE_DB4 = "123456"

inline fun login(name : String , pwd : String ,responseResult: (String , Int) -> Unit){
    if(USER_NAME_SAVE_DB4 == name && USER_PWD_SAVE_DB4 == pwd){
        //登录成功
        responseResult("登录成功",200)
    }else{
        responseResult("登陆失败",444)
    }
}

4.Kotlin语言的函数类型作为返回类型

// TODO 32  Kotlin语言的函数类型作为返回类型
fun main() {
    val showMethod = showMethod("bb")
    println(showMethod("bxb", 22))
}
fun show(info : String) : String{
    println("我是show函数:info:$info")
    return "aa"
}
fun showMethod(info : String) : (String , Int) -> String{
    println("我是show函数 info:$info")
    // return 是匿名函数
    return { name : String , age : Int ->
        "我是匿名函数:name:$name,age:$age"
    }
}

5.Kotlin语言的匿名函数与具名函数

// TODO 33 Kotlin语言的匿名函数与具名函数
fun main() {
    //匿名函数
    showPersonInfo("bxb",22,'男'){
        println("显示结果为:$it")
    }
    //具名函数 showResultImpl
    showPersonInfo("bxb",23,'男',::showResultImpl)
}
fun showResultImpl(result: String){
    println("显示结果为:$result")
}
inline fun showPersonInfo(name: String, age: Int, sex: Char, showResult: (String) -> Unit){
    val str = "name:$name,age:$age,sex:$sex"
    showResult(str)
}
举报

相关推荐

0 条评论