关键字
这里的关键字并非仅仅指的是Kotlin定义的编译关键字,还包括内置函数的一些符号(如常用类型,常用操作)
- package 用于包的定义
- fun 用于函数的定义,函数返回值类型后可以是函数体,也可以是
= 表达式
- return
- Unit 同void,可省略
- val 只读变量
- var 可变变量
- Int 整数类型
- if 既可作if语句,也可作if表达式
- Any 所有类型的基类
- is
- in
- while
- when
- step 遍历步进
- downTo 逆向范围
- data 数据类定义
- until ..操作符的非闭合操作(范围不包含末尾值)
- this
- object 对象声明或对象表达式
- to
- let
- try...catch...finally
- with
- it λ表达式中代指集合的元素
- if else when for do while 流程控制
- break continue return
- class
- constructor
- import as
- init
- open
- final
- this
- super
- override
- abstract
- get
- set
- const
- lateinit
- interface
- private protected internal public
- companion
- object
- data
- sealed
- inner 显式声明内部类,区别于内类
- enum
- by
- infix
- Unit
- vararg
- tailrec
操作符
等号(=)
赋值操作
val c:Int = 10
冒号(:)
变量名与类型的分割,此时冒号前没有空格
fun sum(a:Int,b:Int){}
var a:Int = 1
函数签名与函数返回值类型的分割
fun parseInt(str:String):Int?{ //... }
类定义时与基类的分割,此时冒号前有一个空格(编码规范)
interface Foo<out T : Any> : Bar {
fun foo(a: Int): T
}
美元符($)
用于字符串模板 println("sum of $a and $b is ${a+b}"}
问号(?)
跟在变量类型的后面表示该变量的值可以为null
fun parseInt(str:String):Int?{ //... }
is
判断一个对象是否属于目标类型,若属于,则该对象自动转型为目标类型
if(obj is String){
return obj.length
}
!is
判断一个对象是否不属于目标类型
[ ]
集合(包括List和Map)或数组的索引访问
println(readOnlyMap["a"])
writeableMap["a"] = 3.toString()
writeableMap.put("a","123")
in
双目运算符,用于判定左值是存在于右值(范围或集合)中
用于范围判定
if(a in 1..b+2){//用于判断
println("fits in range")
}
for(a in 2..10 step 2){//用于循环
println(a)
}
用于集合判定
val items = listOf("apple","banana","kiwi")
for(item in items){
println(item)
}
for(index in items.indices){
println("item at $index is ${items[index]}")
}
..
用于表示范围,双目运算符,该运算符前后分别代表范围的始末值,起始值要小于末尾值
if(a in 1..b+2){
println("fits in range")
}
until
用于表示范围,双目运算符,该运算符前后分别代表范围的初始值和末尾值+1,起始值要小于末尾值
for(i in 1 until 10){
println(i)
}
downTo
用于表示范围,双目运算符,该云孙福前后分别代表范围的始末值,起始值要大于末尾智
?.
非null引用
fun notNullShorthand(){
val files = File("haha").listFiles()
println(files?.size)
}
?. ?:
非null引用,否则(为null)其他
fun notNullAndElseShorthand(){
val files = File("haha").listFiles()
println(files?.size?:"empty")
}
?:
为null执行
fun executingStatementIfNull(){
val data = mapOf<String,Int>("1" to 1,"2" to 2)
val email = data["email]?:throw IllegalStateException("Email is missing)
println(email)
}
?.let
非null执行代码块
@
用于标签的定义
loop@ for (i in 1..100) {
for (j in 1..100) {
if (...) break@loop
}
}
用于限定this(已扩展作为自己的成员)
class C {
fun D.foo() {
toString() // calls D.toString()
this@C.toString() // calls C.toString()
}
*
将数组作为可变长参数的实参传入函数中:
fun <T> asList(vararg ts: T): List<T> {
val result = ArrayList<T>()
for (t in ts) // ts is an Array
result.add(t)
return result
}
val a = arrayOf(1, 2, 3)
val list = asList(-1, 0, *a, 4)