關(guān)鍵字
這里的關(guān)鍵字并非僅僅指的是Kotlin定義的編譯關(guān)鍵字,還包括內(nèi)置函數(shù)的一些符號(如常用類型,常用操作)
- package 用于包的定義
- fun 用于函數(shù)的定義,函數(shù)返回值類型后可以是函數(shù)體,也可以是
= 表達式 - return
- Unit 同void,可省略
- val 只讀變量
- var 可變變量
- Int 整數(shù)類型
- if 既可作if語句,也可作if表達式
- Any 所有類型的基類
- is
- in
- while
- when
- step 遍歷步進
- downTo 逆向范圍
- data 數(shù)據(jù)類定義
- until ..操作符的非閉合操作(范圍不包含末尾值)
- this
- object 對象聲明或?qū)ο蟊磉_式
- 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 顯式聲明內(nèi)部類,區(qū)別于內(nèi)類
- enum
- by
- infix
- Unit
- vararg
- tailrec
操作符
等號(=)
賦值操作
val c:Int = 10
冒號(:)
變量名與類型的分割,此時冒號前沒有空格
fun sum(a:Int,b:Int){}
var a:Int = 1
函數(shù)簽名與函數(shù)返回值類型的分割
fun parseInt(str:String):Int?{ //... }
類定義時與基類的分割,此時冒號前有一個空格(編碼規(guī)范)
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
判斷一個對象是否屬于目標(biāo)類型,若屬于,則該對象自動轉(zhuǎn)型為目標(biāo)類型
if(obj is String){
return obj.length
}
!is
判斷一個對象是否不屬于目標(biāo)類型
[ ]
集合(包括List和Map)或數(shù)組的索引訪問
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){//用于循環(huán)
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執(zhí)行
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執(zhí)行代碼塊
@
用于標(biāo)簽的定義
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()
}
*
將數(shù)組作為可變長參數(shù)的實參傳入函數(shù)中:
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)