Kotlin基础学习 05

目录

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

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

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

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

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

6.Kotlin语言的可空性特点

7.Kotlin语言的安全调用操作符

8.Kotlin语言中使用带let的安全调用

9.Kotlin语言中的非空断言操作符特点

10.Kotlin语言中使用if判断null值的情况

11.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)
}

6.Kotlin语言的可空性特点

// TODO 34 Kotlin语言的可空性特点
fun main() {

    //TODO 第一种情况:默认是不可空,不能随意给null
    var name : String = "bxb"
    // 提示:Null can not be a value of a non-null type String
    //不可为空
    //name = null
    println(name)
    //TODO 第二种情况:声明时指定为可空类型
    var name2 : String ?
    name2 = null
    println(name2)
}

7.Kotlin语言的安全调用操作符

// TODO 35 Kotlin语言的安全调用操作符
fun main() {
    var name : String ? = "bxb"
    name = null
    //name.capitalize()  //name是可空类型的 可能是null,想要使用name,必须给出补救措施
    val r = name?.capitalize() //name是可空类型的 如果真的是null, ?后面这一段代码不执行,就不会引发空指针异常
    println(r)
}

8.Kotlin语言中使用带let的安全调用

// TODO 35 Kotlin语言中使用带let的安全调用
fun main() {
    var name : String ? = null
    name = "bxb"
    name = ""
    //name是可空类型的,如果真的是null,?后面的代码不执行,就不会引发空指针异常
    val r = name?.let {
        //it = name 本身
        //如果能够执行到这里,it 一定不为null

        if(it.isBlank()){ //如果name值是空值 "" 没有内容
            "Default"
        }else{
            "[$it]"
        }
    }
    println(r)
}

9.Kotlin语言中的非空断言操作符特点

// TODO 35 Kotlin语言中的非空断言操作符特点
fun main() {
    var name : String ? = null
    name = "bxb"
    val r = name!!.capitalize()//!!断言 不管name是否为null都执行
    println(r)
    //结论:规矩:如果百分百能保证name是有值的,那么才能使用断言 !!,否则有java空指针异常的风险
}

10.Kotlin语言中使用if判断null值的情况

// TODO 37 Kotlin语言中使用if判断null值的情况
fun main() {
    var name : String ? = null
    //name.capitalize()  //name是可空类型的 可能是null,想要使用name,必须给出补救措施
    //name = "bxb"
    if(name != null){
        val r = name.capitalize()
        println(r)
    }else{
        println("name is null")
    }
}

11.Kotlin语言空合并操作符

// TODO 38 Kotlin语言空合并操作符
fun main() {
    var name : String ? = "bxb"
     name = null

    //空合并操作符  xxx ?: "原来你是null啊"   "如果xxx等于null,执行?: 后面的区域,否则执行name"
    println(name ?: "原来你是null啊")

    //let 函数 + 空合并操作符
    println(name?.let { "[$it]" } ?: "原来你是null啊2")
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值