kotlin中的常见符号

作者: jeff_sun | 来源:发表于2017-11-02 17:48 被阅读330次

    1.【?,?.,?:,!!,filterNotNull】可空类型与非空类型

    【?可空类型】

    在 Kotlin 中,类型系统区分一个引用可以容纳 null{: .keyword } (可空引用)还是不能容纳(非空引用)。
    例如,String 类型的常规变量不能容纳 null{: .keyword }

    var a: String = "abc"
    a = null // 编译错误
    

    如果我们定义的变量是一个可以为空的类型,则要用String?

    var b: String? = "abc"
    b = null // 编译通过
    

    【?.安全调用操作符】

    如果我们要获取字符串b的长度,则调用b.length,这时候编译器会报错

    val l = b.length // 错误:变量“b”可能为空
    val l = b?.length//ok,如果 b 非空,就返回 b.length,否则返回 null,{: .keyword },这个表达式的类型是 Int?。
    

    【?:Elvis 操作符】

    对于上面的例子,在开发中我们经常的操作是,当b不为空时,我们返回另一个值y,当b为空时,我们返回一个值x,而不是null,
    这样就用到Elvis操作符

    val l = b?.length?:-1//当b不为空时,返回b.length,当b为空时,返回-1
    

    【!!操作符】

    还有一种情况就是,如果我传的b为空,我希望系统直接给我抛出个NPE异常,就会用到!!操作符

    val l = b!!.length//如果b不为空,则返回b.length,如果b为空,则抛出异常NullPointerException
    

    【filterNotNull】

    如果你有一个可空类型元素的集合,并且想要过滤非空元素,你可以使用 filterNotNull 来实现。

    val nullableList: List<Int?> = listOf(1, 2, null, 4)
    val intList: List<Int> = nullableList.filterNotNull()
    

    2.【$符号】

    这个特别简单,也很好用,举个例子,开发中我们会常去拼接请求的url

    ------------java------------
    String baseUrl = "http://www.baidu.com/"
    String imageUrl = baseUrl+"?page=1&size=10"//当然这些数字不能写死,一般我们都是添加在FormBody中的
    ------------kotlin-------------
    val imageUrl = "$baseUrl?page=$page&size=$size"
    

    3.【==和===】

    ==判断值是否相等,===判断值及引用是否完全相等。

    val num: Int = 128;
    val a:Int? = num
    val b:Int? = num
    println(a == b)  //true
    print(a === b)   //true
    

    4.【..区间】

    区间(或叫作范围)表达式由具有操作符形式 .. 的 rangeTo 函数辅以 in 和 !in形成。

    if (i in 1..10) { // 等同于 1 <= i && i <= 10
        println(i)
    }
    //使用until函数,创建一个不包括其结束元素的区间
    for (i in 1 until 10) {   // i in [1, 10) 排除了 10
         println(i)
    }
    //如果你想倒序迭代数字呢?也很简单。你可以使用标准库中定义的 downTo() 函数
    for (i in 4 downTo 1) print(i) // 输出“4321”
    //能否以不等于 1 的任意步长迭代数字? 当然没问题, step() 函数有助于此
    for (i in 1..4 step 2) print(i) // 输出“13”
    for (i in 4 downTo 1 step 2) print(i) // 输出“42”
    

    5.【_】

     data class Book(var id: Int, var name: String)
    Book声明了 id,name两个变量。解构时如果只需要id这一个变量时
    val book = Book(1, "英语")
    val (id, _) = book
    

    6.【::】得到类的Class对象

    //得到类的Class对象
    startActivity(Intent(this@KotlinActivity, MainActivity::class.java))
    

    7.【@】

    1、限定this的类型

    class User {
        inner class State{
            fun getUser(): User{
                //返回User
                return this@User
            }
            fun getState(): State{
                //返回State
                return this@State
            }
        }
    }
    

    2、跳出循环

    loop@ for (itemA in arraysA) {
         var i : Int = 0
          for (itemB in arraysB) {
             i++
             if (itemB > 2) {
                 break@loop
             }
             println("itemB:$itemB")
         }
    }
    

    3、命名函数自定义标签

    fun fun_run(){
        run {
            println("lambda")
        }
        var i: Int = run {
            return@run 1
        }
        println("$i")
        //匿名函数可以通过自定义标签进行跳转和返回
        i = run (outer@{
            return@outer 2
        })
        println(i)
    }
    

    相关文章

      网友评论

        本文标题:kotlin中的常见符号

        本文链接:https://www.haomeiwen.com/subject/drtapxtx.html