最近开始了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中常用操作符和用法介绍
网友评论