kotlin基本特性

  • 可空类型
    如果要定义一个变量,并且赋值null,在kotlin中需要这样做,否则编译不过
    在这里插入图片描述
    如果想给空,需要在定义变量的时候,加?号

    var name2: String ?
    name2 = null
    
    name2?.chars() // 如果name2是null的情况下,chars()是不会被执行的,从而避免空指针异常;如果不加?调用chars()函数,则编译不通过,因为系统判断name2有可能为空
    
    var name2: String ?
    // name2 = "  "
    name2 = "ssdf"
    
    var ans = name2?.let{
        if (it.isBlank()) {
            "Default"
        } else {
            it
        }
    }
    
  • 断言(用于调试,不能用于生产环境)

        var name3: String ? = null
        name3!!.let {  } // 使用断言,不会检测name是否为空,可以编译通过,但是如果name3为空,调用let函数会抛出空指针异常
    
  • 空合并操作符 ?:

    val t = name3 ?: "tttt"   // 如果变量name3是空,则返回"tttt"否则,返回name3的值给t
    
  • 自定义异常

    fun main(args: Array<String>) {
        try {
            var info: String? = null
            checkException(info)
           
        } catch (e: Exception) {
            println("Oops! $e")
        }
    }
    
    fun checkException(info: String?) {
        info ?: throw CustomException()
    }
    
    class CustomException : IllegalArgumentException("too bad")
    
  • 字符串截取和解构表达式

        val str : String = "Dany is a boy"
        val substring = str.substring(0 until str.indexOf("is"))
        println(substring)
    
        var str2: String ="Leggy,Harry,Ldeg,Marry,Petty,Scott,Tide"
        val strings = str2.split(",")
    
        val (var1, var2, var3, var4, var5) = strings
        println("v1:$var1, v2:$var2, v3:$var3, v4:$var4, v5:$var5")
    
  • replace 函数的使用

        val str3 = "Hello World"
        var newStr3 = str3.replace("o", "t")
        println(newStr3)
    
        val str4 = "Hello World"
        var newStr4 = str4.replace(Regex("[oW]")) {
            when(it.value){
                "o" -> "g"
                "W" -> "1"
                else->
                    it.value
            }
        }
        println(newStr4)
    
  • forEach

        val str = "ABC"
        str.forEach { println(it) }
    
  • 字符串转整型

        val num = "43".toIntOrNull()
        println(num)
    
  • Double 转 Int

    val num2 = 23.56.toInt()
    println(num2)
    23.45.roundToInt() // 结果四舍五入
    
    val format = "%.10f".format(23.46)
    println(format)
    
  • apply函数

    apply {} 始终返回str,且{} 中,没有it,持有thisthis 就是 str
    str.apply {
            
    }.apply { 
        
    }.apply { 
        
    }
    
  • listOf 函数 和 let 函数

    val list = listOf(1, 2, 3, 4 ,5)
    val result = list.let {
        println(it)
        it.first() + it.first()
    }
    println(result)
    
  • run函数
    run 函数将调用它对象作为参数,传递给具名函数或者匿名函数,执行的结果是匿名或者具名函数执行完成后的返回结果,因此可以链式调用。

    fun main(args: Array<String>) {
    
        val str = "DSfy"
    	// 写法1
        str.run(::isLong)
            .run(::showText)
            .run(::mapText)
            .run(::println)
    	// 写法2
        str.let(::isLong)
            .let(::showText)
            .let(::mapText)
            .let(::println)
        // 写法3 
    	with(with(with(with(str, ::isLong), ::showText), ::mapText), ::println)
    }
    
    fun isLong(str: String) = str.length > 5
    
    fun showText(isLong: Boolean) = if(isLong) "Text is long" else "Text is short"
    
    fun mapText(text: String) = "[ $text ]"
    
  • also 函数 ,与apply函数的功能基本一样。also的匿名函数中的it与调用also的对象是同一个

    fun main(array: Array<String>) {
    
        val str = "ABCDEFG"
    
        val ans = str.also {
                println(it)
                "CDEF"
            }
            .also {
                println(it.length)
            }
    
        println(ans)
    }
    
  • takeIf函数:根据匿名函数的返回值true/false决定最终的返回结果,如果是true,则返回调用调用者,false则返回null。一般与 空操作符?:配合使用

    fun main(args: Array<String>) {
    
        val name = "ABCDEFG"
        val ans = name.takeIf {
            false
        } ?: "you are null"
    
        println(ans)
    
    }
    
  • takeUnless 根据匿名函数的返回值true/false决定最终的返回结果,如果是true,则返回null,false则返回调用者本身。与takeIf函数的作用相反

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值