Kotlin常用操作符总结

常用操作符

1、? 操作符</br>

表示对象可能为空,或者对象可以为空

//在变量之后加上 ?,则代表变量可以为空
var name: String? = null

//加在函数返回值类型后边,表示函数方法返回值可以为空
fun getName(): String? {
    ....
}

//如果 b非空,就返回 b.length ,否则返回 null,这个表达式的类型是 Int? 。
//相当于 if not null
b?.length 

2、 ?: 操作符</br>

相当于 if null 执行一个语句

val values = ……
// 如果 values["email"] 为null,则执行 throw IllegalStateException("Email is missing!")
// 反之执行 values["email"]
val email = values["email"] ?: throw IllegalStateException("Email is missing!")

3、 !! 操作符</br>

当对象为null,则抛出空指针(NPE)异常:</br>

val l = b!!.length

4、 .. 操作符</br>

x .. y  
//从x 到y,并且包含x、y值,是一个闭区间运算符
//相对的 until 则是半闭区间运算符,包含 x 不包含 y

5、 in 操作符</br>

in 表示包含在区间中, !in 则不在区间中

if(i in 1..10){ //相当于 i >= 1 && i<= 10
    
}

for(i in 1 until 10)
相当于
for(i = 1,i < 10,i++)

6、 == 与 === 操作符</br>

== 判断值是否相等,</br>
=== 判断引用是否相等

7、 :: 操作符</br>

得到类的 class 对象,创建一个成员引用或者一个类引用 </br>

1、得到类的class
val c = MyClass::class

2、函数引用
//声明一个函数
fun isOdd(value: Int) = value%2 != 0
//作为函数类型值传递给另外一个函数
val numbers = listOf(1,2,3)
println(numbers.filter(::isOdd))
//运行结果
[1,3]

如果我们需要使用类的成员函数或扩展函数,它需要是限定的,例如 String::toCharArray。

整体理解就是对函数或者类的一个引用,在上下文中明确函数返回类型,也可以使用该操作符重载函数

8、 @ 操作符</br>

  • 引入一个注解
//声明
annotation class Fancy
//用法
@Fancy class Foo {
    @Fancy fun baz(@Fancy foo: Int): Int {
        return (@Fancy 1)
    }
}
  • 引入或者引用一个循环标签
标签的格式为标识符后跟 @ ,例如:abc@、fooBar@
1、跳出一个双层循环
loop@ for (i in 1..100) {
    for (j in 1..100) {
        if (……) break@loop
    }
}

相当于在 return、continue、break 关键词之后加上 @label,则跳转结束到 @label 处

return@a 1
//当要返一个回值的时候,解析器优先选用标签限制的 return,
//相当于 从标签 @a 返回 1
  • 限定 this 的类型
class A { // 隐式标签 @A
    inner class B { // 隐式标签 @B
        fun Int.foo() { // 隐式标签 @foo
            val a = this@A // A 的 this
            val b = this@B // B 的 this

            val c = this // foo() 的接收者,一个 Int
            val c1 = this@foo // foo() 的接收者,一个 Int

            val funLit = lambda@ fun String.() {
                val d = this // funLit 的接收者
            }


            val funLit2 = { s: String ->
                // foo() 的接收者,因为它包含的 lambda 表达式
                // 没有任何接收者
                val d1 = this
            }
        }
    }
}
  • 引用外部超类
class Bar : Foo() {
    override fun f() { /* …… */ }
    override val x: Int get() = 0
    
    inner class Baz {
        fun g() {
            super@Bar.f() // 调用 Foo 实现的 f()
            println(super@Bar.x) // 使用 Foo 实现的 x 的 getter
        }
    }
}

-> 操作符

  • 分隔在函数类型中的参数类型与返回类型声明
详细具体可以参考
http://www.kotlincn.net/docs/reference/lambdas.html#%E5%87%BD%E6%95%B0%E7%B1%BB%E5%9E%8B

1、(A,B)-> C 
    表示 接收的类型分别是 参数类型A、参数类型B、返回值类型C 的值

  • 分隔 when 表达式分支的条件与代码体
when (x) {
    1 -> print("x == 1")
    2 -> print("x == 2")
    else -> { // 注意这个块
        print("x is neither 1 nor 2")
    }
}

参考</br>
http://www.kotlincn.net/docs/reference/idioms.html</br>
https://www.kotlincn.net/docs/reference/keyword-reference.html</br>
https://blog.csdn.net/dangnianmingyue_gg/article/details/75305504

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容