小鸭子的学习笔记duck

Duck Blog

唐如飞

( ^∀^)/欢迎\( ^∀^)

79 文章数
14 评论数

Kotlin-基础(day-2)

tangrufei
2023-02-23 / 0 评论 / 177 阅读 / 0 点赞

kotlin匿名函数

   fun main() {
        //TODO ==================Kotlin语言的匿名函数
        var len ="Derry".count()
        println(len);
        var len2="Derry".count(){
            //it 等价于D e r r y 的字符  lamda表达式
            it=='r'
        }
        println(len2);
    }

kotlin的函数类型&隐式返回

fun main() {
        //TODO ==================Kotlin语言的函数类型&隐式返回
        //TODO ==================我们现在写函数

        //第一步: 函数输入输入的申明
        var methodAction :() ->String

        //第二步:对上面函数的实现 lamda表达式
        methodAction = {
            var inputValue =999999
            "Derry"
            //匿名函数不要写return,最后一行就是返回值
            "$inputValue Derry"
        }
        //第三步:调用函数
        println(methodAction())
    }

Kotlin语言的函数参数

 fun main() {
        //TODO ==================Kotlin语言的函数参数
        //开始写函数

        //第一步:函数输入与输入申明 第二步:对申明函数的实现
        var methodAction: (Int,Int,Int)->String={n1,n2,n3->
            var inputValue =999999
            "Derry"
            //匿名函数不要写return,最后一行就是返回值
            "$inputValue Derry 参数一:$n1,参数二:$n2,参数三:$n3"
        }
        println(methodAction(1,2,3)) //999999 Derry 参数一:1,参数二:2,参数三:3
    }

kotlin语言的it关键字

 fun main() {
        //TODO ==================Kotlin语言的it关键字
        //相当于item 单个参数没有取名默认名为it
        var methodAction: (Int,Int,Int)->String={n1,n2,n3->
            var inputValue =999999
            "Derry"
            //匿名函数不要写return,最后一行就是返回值
            "$inputValue Derry 参数一:$n1,参数二:$n2,参数三:$n3"
        }

        var methodAction2: (String) ->String    = {"${it}"}
        
    }

Kotlin语言匿名函数的类型推断

   fun main() {
        //TODO ==================Kotlin语言匿名函数的类型推断
        //如果方法名是:的方式必须指定 参数类型 和返回类型
        //方法名=类型推断返回值
       var method1= { v1:Int,v2:Double,v3:String ->
           "v1=$v1,v2=$v2,v3=$v3"

        }
        var method2= { 1.4f}
        var method3= { 999}
        println(method1(1,2.0, "3"))
    }

Kotlin语言的lamda学习

fun main() {
        //TODO ==================Kotlin语言的lamda学习
        val addResult = {v1:Int,v2:Int->"v1加v2的结果是:${v1 + v2}"}
        println(addResult(2,7))
        //匿名函数 入参 Int 返回类型Any
        //lamda表达式的入参 Int  lambda表达式的结果Any类型
        var workResult= { v1 :Int->
            when (v1) {
            1->"星期一"
                2->"星期二"
                3->"星期三"
                4->"星期四"
                5->"星期五"
                else->-1
            }

        }
        println(workResult(5))
    }

Kotlin语言的函数中定义参数是函数

fun main() {
        //TODO ==================Kotlin语言的函数中定义参数是函数
        loginApi("ad", "123456"){msg:String,code:Int->
            println("登陆结果: $msg,code:$code")
        }
    }
    //模拟数据库
    const val UserName = "admin"
    const val Password = "password"
    //登陆
    fun loginApi(username: String, password: String,responseResult:(String ,Int)->Unit) {
        if (username.isBlank() || password.isBlank()) {
            TODO("用户名或密码为空")
        }
        if(username.length>3&&password.length>3) {
            if (username.equals(UserName) && password.equals(Password)) {
                responseResult("LOGIN SUCCESS",200)
            }else{
                responseResult("LOGIN ERROR",404)
            }
        }else{
           TODO("用户名或密码不符合规范")
        }

    }
fun checkDataTimeOverlap(dataStartTime: LocalDateTime, dataEndTime: LocalDateTime,
                         dbStartTime: LocalDateTime, dbEndTime: LocalDateTime) {
    if (dataEndTime.isBefore(dataStartTime) || dbEndTime.isBefore(dbStartTime)) {
        throw IllegalArgumentException("End time must be after start time")
    }
    if (!dataStartTime.isBefore(dbEndTime) || !dataEndTime.isAfter(dbStartTime)) {
        throw IllegalArgumentException("Data time overlaps with DB time")
    }
}

Kotlin语言的函数内联学习

fun main() {
        //TODO ==================Kotlin语言的函数内联学习
        loginApi("ad", "123456"){msg:String,code:Int->
            println("登陆结果: $msg,code:$code")
        }
    }
    //模拟数据库
    const val UserName = "admin"
    const val Password = "password"
    //登陆
//如果不申明为内联函数会有性能损耗
//如果此函数使用内联相当C++中的#define 宏定义 宏替换  会把代码替换到调用处 调用出没有任何 函数开辟 对象开辟的损耗
//小结:如果函数中有使用到lamda表达式.尽量使用 inline关键字,这样内部会做优化,减少,函数开辟,对象开辟 的损耗
   inline fun loginApi(username: String, password: String,responseResult:(String ,Int)->Unit) {
        if (username.isBlank() || password.isBlank()) {
            TODO("用户名或密码为空")
        }
        if(username.length>3&&password.length>3) {
            if (username.equals(UserName) && password.equals(Password)) {
                responseResult("LOGIN SUCCESS",200)
            }else{
                responseResult("LOGIN ERROR",404)
            }
        }else{
           TODO("用户名或密码不符合规范")
        }

    }

Kotlin语言的函数引用

fun main() {
        //TODO ==================Kotlin语言的函数引用

    login("admin", "123456",::methodResponseResult)
    //函数引用
    //lambda属于函数类型的对象,需要把methodResponseResult普通函数变成 函数类型的对象(函数引用)

     //login("admin", "123456",::methodResponseResult)
    }
fun methodResponseResult(msg:String,code:Int) {
    println("登录结果为${msg},code${code}")

}
    const val username1="username"
    const val password1="password"
    inline fun login(username: String, password: String,responseResult :(String ,Int)->Unit){
        if(username == username1 && password == password1){
            responseResult("登录成功",200)
        }else{
            responseResult("登陆失败",404)
        }
    }

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

fun main() {
        //TODO ==================Kotlin语言的函数类型作为返回类型
   // show("学习kotlin")
    //val show2Method = show2("show")
    //show2Method==匿名函数 是show2的返回值,只不过这个函数是一个函数
    //println(show2Method("Derry",35))
    println(show2("show")("Derry",35))
}
fun show(info:String):Boolean{
    println("我是show函数 info:${info}")
    return true
}
fun show1(info:String):String{
    println("我是show函数 info:${info}")
    return "嘿嘿嘿"
}
fun show2(info:String):(String,Int)->String{
    println("我是show函数 info:${info}")
   // return  一个函数 匿名函数
    return { name:String,age:Int ->
        "我是匿名函数:我的name:$name,age:$age"
    }
}

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

fun main() {
        //TODO ==================Kotlin语言的匿名函数与具名函数
    //匿名函数
    showPersonInfo("李四",57,"翻斗花园","13141@163.com","13554543"){
        println("显示结果:$it")
    }
    //具名函数
    showPersonInfo("牛爷爷",99,"翻斗花园","13@163.com","13554543",::showPersonInfoImpl)
}
fun showPersonInfoImpl(result:String){
    println("显示结果:$result")
}
inline fun showPersonInfo(name:String, age:Int, address:String, email:String, phone:String,showResult:(String)->Unit){
    var result ="name:$name,age:$age,address:$address,email:$email,phone:$phone"
    showResult(result)
}

Kotlin语言可空性特点

fun main() {
        //TODO ==================Kotlin语言可空性特点
    //TODO ==================默认是不可能空类型,不能随意给null
    var name="张三"
    //不能为空类型的
    //name = null
    //TODO ==================第二种情况:申明时指定为可空类型
    var name2 :String ?
    name2 = null
    name2 = "张根硕"
}

Kotlin语言安全调用操作符

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

}
文章不错,扫码支持一下吧~
上一篇 下一篇
评论
来首音乐
光阴似箭
今日已经过去小时
这周已经过去
本月已经过去
今年已经过去个月