目录标题
- Kotlin 常用的一些复合符号( '?' '?:' '!!' '::' '. .' 'as?' )
- 1、 [ : ] ------ 冒号 操作符
- 2、 [ ? ] ------ 问号
- 3、 [ !! ] ------ 双感叹号 操作符
- 4、 [ ?: ] ------ 感叹号冒号 操作符(Elvis)
- 5、 [ :: ] ------ 双冒号 操作符
- 6、 [ as ] ------ 类型转换运算符
- 7、 [ . . ] ------ 双点号 区间操作符
- 8、 [ -> ] ------ 中横杆大于号 操作符
- 9、 [ == 和 === ] ------ 等号 操作符
- 10、 [ is ] ------ 属于操作符
- 11、 [ $ ] ------ 模板操作符
- 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? 】。
- " ?" 表示这个对象可以为空
//在变量类型后面加上 ? ,代表该变量是可为空
var age: String? = "23"
// 如果 str 不能转为 Int 类型,则返回 null
fun parseInt(str: String): Int? {
// nothing
}
3、 [ !! ] ------ 双感叹号 操作符
" !! "
放在对象或方法传递实参后面,表示不能为空(null),如果为 null 则抛出异常; Kotlin 不推荐使用非空断言,通常我们会用 " ?: " 来防止程序运行时报空指针异常而崩溃;
" !! " 的用法相当于 Java 里的 if else 判断是否为 null。
- " !! " Null 检查机制符
//非空 b,如果 b 为空,则抛出空指针
val l = b!!.length
4、 [ ?: ] ------ 感叹号冒号 操作符(Elvis)
" ?: "
可以指定可空变量为空时,调用该变量中的成员方法或属性的返回值; 其语法格式为: “表达式A ?: 表达式B”。 如果左侧表达式A 非空,则返回左侧表达式A 的值,否则返回右侧表达式B 的值。当且仅当左侧为空时,才会对右侧表达式B 求值。
" ?: " 的用法类似于 Java 里使用三目运算符。
- " ?:" 表示非空则使用,否则返回指定数值
//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。
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 为后缀;其基础 思维导图如下图: