kotlin 操作符集合

作者: 橘子周二 | 来源:发表于2017-12-11 18:04 被阅读43次
    图片来自百度

    最近开始了kotlin的学习,刚开始没两天我就发现在各种与语句中需要给变量加很多符号修饰。对这些符号知之甚少,所以立马停了下来,翻老司机博客仔细学习了一遍。在学习理解操作符的时候,之前遇到的问题也是引刃而解。个别操作符还理解不够深,毕竟用得还不够多。本篇记录学习时的分析细节和例子,便于之后继续加深学习时快速理清思路。

    1 ? 操作符 允许一个变量或返回值为null

            //不使用?操作符 修饰则一定不能为空  var name:String = null 报错
            var str: String? = null
    

    2 ?: 操作符 指定变量在非空时才执行操作,否则用某个非空值 X 代替。类似于 java 的,非空校验

            //原始写法
            val ii:Int = if(null != str) str.length else -1
    
            //使用?:  (Elvis 表达式-这名字真陌生)
            val ii2:Int = str?.length ?: -1
    

    3 !!操作符 如果str 为空就抛出 NPE 在kotlin NPE都要显示的表现出来,否则要么就没结果,要么 - - 就编译错误。

     val ii3:Int = str!!.length
    

    4 表达式 =====

            print("== and ===")
            var p: Long = 1222111
            var a: Long = p
            var b: Long = p
    
            print(a == b)
            print(a === b)
            //log:true  true
    
            var c: Long? = p
            var d: Long? = p
    
            print(c == d)
            print(c === d)
            //log:true  false
    
            var e: Long? = p
            var f: Long = p
            print(e == f)
            print(e === f)
            //log:true false
    
            //一脸蒙蔽啊,已在社区提交了这个疑问````
    

    5 ..in!in!in还么发现有什么用)

            print("..符号 in  (!in)还不知道怎么使用")
            //   i in [1,10] 闭区间
            for (i in 1..10) {
                print(i)
            }
            //i in[1,10) 半闭区间
            for (i in 1 until 10) {
                print(i)
            }
    

    6 downTo()函数

            print("downTo()函数,倒叙便利,区间内循环")
    
            for (i in 5 downTo 1) {
                print(i)
            }
    

    7 step 函数

            print("step()函数,设定迭代数量")
            for (i in 1..10 step 3) {
                print(i)
            }
    
            for (i in 10 downTo 1 step 2) {
                print(i)
            }
    

    8 ::符号

            print(":: 符号")
            var clzz: Class<MainActivity> = MainActivity::class.java
            print(clzz.name)
    

    9 @符号-跳出循环,中断方法,

    9.1 限定this的类型
            class User {
    
                inner class State {
                    fun getUser(): User {
                        //返回User
                        return this@User
                    }
    
                    fun getState(): State {
                        //返回State
                        return this
                    }
                }
            }
    
    9.2 作为标签,例跳出双层循环
          loop@  for(i in 1..10){
    
                for(v in 1..10){
                    print("i=$i+|  v=$v")
                    if(v == 5) break@loop
                }
            }
    
    9.3 命名函数 自动定义标签
            fun f_run(){
                run{
                    print("run method")
                }
    
                var i:Int= run{
                     return@run 12
                    }
    
                print("$i")
        //匿名函数可通过自定义标签跳转和返回
    
                i = run (outer@{
                    return@outer 22
                })
                 print("$i")
            }
            f_run()
    
    
    
        //forEach中无法使用continue和break;
        var ins:List<Int> = listOf(1,2,3,4,5,6,7)
            ins.forEach {
                if(it == 4) return@forEach //相当于在forEach函数中continue,实际上是从匿名函数返回
                print("ins.forEach it=$it")
            }
    
            //声明一个标签,作为想要结束时跳转的节点
            run outer@{
                ins.forEach {
                    if(it  == 7) return@outer //直接跳出方法outer,从而达到结束forEach
                    if(it%2 == 0) return@forEach //中断以后逻辑,进行下一次循环,所以下面将不会打印偶数
                    print("ins.forEach it=$it")
                }
    
            }
    
    

    10 符号 as

            print("类型转换  as  as?")
            var oper1:KotlinRunner = Operator()
            //尽量使用 as?避免CCE-(无知缩写)
            var oper2 = oper1 as? Operator
    

    11 符号 is

            print("类型判断符号   is")
    
           fun classCheck(oper:KotlinRunner?):String{
    
                when(oper is Operator){
                    true -> return "Operator"
                    false -> return "null"
                }
    
            }
            print(classCheck(oper2))
    
    

    END

    感谢以下文字的分析
    Kotlin中常用操作符和用法介绍

    相关文章

      网友评论

        本文标题: kotlin 操作符集合

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