目录标题

  • Kotlin 常用的一些复合符号( '?' '?:' '!!' '::' '. .' 'as?' )
  • 1、 [ : ] ------ 冒号 操作符
  • 2、 [ ? ] ------ 问号
  • 3、 [ !! ] ------ 双感叹号 操作符
  • 4、 [ ?: ] ------ 感叹号冒号 操作符(Elvis)
  • 5、 [ :: ] ------ 双冒号 操作符
  • 6、 [ as ] ------ 类型转换运算符
  • 7、 [ . . ] ------ 双点号 区间操作符
  • 8、 [ -> ] ------ 中横杆大于号 操作符
  • 9、 [ == 和 === ] ------ 等号 操作符
  • 10、 [ is ] ------ 属于操作符
  • 11、 [ $ ] ------ 模板操作符


kotlin remember源码 kotlin !!_操作符

  • Kotlin 是什么?

Kotlin [科特林] 是一个用于现代多平台应用的静态编程语言,由 JetBrains 开发; Kotlin 是一门静态语言,支持多种平台,包括移动端、服务端以及浏览器端; Kotlin 还是一门融合了面向对象与函数式编程的语言,支持泛型、安全的空判断,并且 Kotlin 与 Java 可以做到完全的交互。

在Google I/O 2017中,Google 宣布 Kotlin 成为 Android 官方开发语言。

Kotlin 的作用:

①简洁: 大大减少样板代码的数量。 ②安全: 避免空指针异常等整个类的错误。 ③互操作性: 充分利用 JVM、Android 和浏览器的现有库。 ④工具友好: 可用任何 Java IDE 或者使用命令行构建。

Kotlin 常用的一些复合符号( ‘?’ ‘?:’ ‘!!’ ‘::’ ‘. .’ ‘as?’ )

1、 [ : ] ------ 冒号 操作符

" : "

操作符用来定义变量、类的继承等

" : " 冒号跟引用类型。

  • " : " 操作符用来定义变量、类的继承等
//定义变量
var name: String
//继承类
class MainActivity : AppCompatActivity()

2、 [ ? ] ------ 问号

" ?"

修饰在成员变量的类型后面,表示这个变量可以为空(null),系统在任何情况下不会报它的空指针异常; " ? " 修改在对象后面代表该对象如果为空(null),则不处理后面逻辑;

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

kotlin remember源码 kotlin !!_android_02

  • " ?" 表示这个对象可以为空
//在变量类型后面加上 ? ,代表该变量是可为空
var age: String? = "23" 

// 如果 str 不能转为 Int 类型,则返回 null
fun parseInt(str: String): Int? { 
 // nothing
}

3、 [ !! ] ------ 双感叹号 操作符

" !! "

放在对象或方法传递实参后面,表示不能为空(null),如果为 null 则抛出异常; Kotlin 不推荐使用非空断言,通常我们会用 " ?: " 来防止程序运行时报空指针异常而崩溃;

" !! " 的用法相当于 Java 里的 if else 判断是否为 null。

kotlin remember源码 kotlin !!_操作符_03

  • " !! " Null 检查机制符
//非空 b,如果 b 为空,则抛出空指针
val l = b!!.length

4、 [ ?: ] ------ 感叹号冒号 操作符(Elvis)

" ?: "

可以指定可空变量为空时,调用该变量中的成员方法或属性的返回值; 其语法格式为: “表达式A ?: 表达式B”。 如果左侧表达式A 非空,则返回左侧表达式A 的值,否则返回右侧表达式B 的值。当且仅当左侧为空时,才会对右侧表达式B 求值。

" ?: " 的用法类似于 Java 里使用三目运算符。

kotlin remember源码 kotlin !!_操作符_04

  • " ?:" 表示非空则使用,否则返回指定数值
//a 不为空,返回 a 的长度,否则返回 -1
val 1ength==a?.length?:-1
//相当于
val length:Int=if(a!=null)a.length else -1

5、 [ :: ] ------ 双冒号 操作符

" :: "

表示把一个方法当做一个参数,传递到另一个方法中进行使用,通俗的来讲就是引用一个方法;可以用来得到类的 Class 对象;

" :: " 双冒号跟方法名 作用就是将方法作为参数传入。

  • " :: " 可以用来得到类的 Class 对象
//得到 SecondActivity 对象
startActivity(Intent(this@MainActivity, SecondActivity::class.java))

6、 [ as ] ------ 类型转换运算符

" as "

表示如果类型转换不成功,类型转换操作符通常会抛出一个异常,因此不安全的类型转换 使用操作符 as ; 当类型转换失败时会返回 null,为了避免抛出异常,可以使用安全的类型转换操作符 as?;

" as " 若把值转换成给定的类型,如果类型不合适就返回 null。

kotlin remember源码 kotlin !!_kotlin remember源码_05

7、 [ . . ] ------ 双点号 区间操作符

" . . "

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

in 操作符,代表 i 在某一个区间类; !in 代表 i 不在某一个区间类; . . 闭区间操作符,代表在 a 到 b 区间类,包含 a 和 b; until 半闭区间操作符,代表 a 到 b 区间,包含a 不包含 b; downTo() 函数:倒叙区间内循环,a 到 b 区间倒叙迭代数字; step() 函数:跳跃式函数,奇偶判断选择,可以指定任意步长。

// 输出数字 “ 1 到 10 ”
if (i in 1..10) { print(i)} 	
// 输出数字 “ 1 到 9 ”同[1,10)
for (i in 1 until 10) { print(i)} 	
// 输出数字 “54321”
for (i in 5 downTo 1) print(i) 
// 输出数字 “ 135 ”
for (i in 1..5 step 2) { print(i)} 	
// 输出数字 “ 531 ”
for (i in 5 downTo 1 step 2) { print(i)}

// 如果 i 在 1 到 10 十个数之间,就输出 i
if(i in 1..10){ 
    print (i)
}
// 如果 i 不在 1 到 10 十个数之间,就输出 i
if(i !in 1..10){ 
    print (i)
}
// 什么都不输出,注意这种递减情况建议使用 until 或 downTo 
for (i in 4..1){
	 print(i)
 }
// 如果 i 在 1 到 10 九个数之间(不包含 10),就输出 i
if(i in 1 until 10){ 
    print (i)
}

8、 [ -> ] ------ 中横杆大于号 操作符

" -> "

单从形态上看,是一种流向和对应的关系; 表示即前面的语句执行之后,将执行流转到指向的语句,并且是对应的。

9、 [ == 和 === ] ------ 等号 操作符

== 判断值是否相等,比较两个数值大小。 === 判断值及引用是否完全相等,比较两个对象地址。

var a:Int = 10
print(a===a)	//结果:true
var b:Int =a
var c:Int =a
print(b===c)	//结果:false
print(b==c)		//结果:true

10、 [ is ] ------ 属于操作符

" is "

此操作符可以用来判断某个实例是否属于另一个实例

//name 是否是 String 类型
if (name is String){ 
    print(true)
}

11、 [ $ ] ------ 模板操作符

" $ "

此模板操作符可以输出一个变量值,相当于拼接字符串。

// 输出结果为 My name is GuYu
var name="GuYu"
print("My name is $name")

Kotlin 文件以 .kt 为后缀;其基础 思维导图如下图:

kotlin remember源码 kotlin !!_kotlin remember源码_06