Kotlin代碼實踐之關(guān)鍵字與操作符

關(guān)鍵字

這里的關(guān)鍵字并非僅僅指的是Kotlin定義的編譯關(guān)鍵字,還包括內(nèi)置函數(shù)的一些符號(如常用類型,常用操作)

  1. package 用于包的定義
  2. fun 用于函數(shù)的定義,函數(shù)返回值類型后可以是函數(shù)體,也可以是 = 表達式
  3. return
  4. Unit 同void,可省略
  5. val 只讀變量
  6. var 可變變量
  7. Int 整數(shù)類型
  8. if 既可作if語句,也可作if表達式
  9. Any 所有類型的基類
  10. is
  11. in
  12. while
  13. when
  14. step 遍歷步進
  15. downTo 逆向范圍
  16. data 數(shù)據(jù)類定義
  17. until ..操作符的非閉合操作(范圍不包含末尾值)
  18. this
  19. object 對象聲明或?qū)ο蟊磉_式
  20. to
  21. let
  22. try...catch...finally
  23. with
  24. it λ表達式中代指集合的元素
  25. if else when for do while 流程控制
  26. break continue return
  27. class
  28. constructor
  29. import as
  30. init
  31. open
  32. final
  33. this
  34. super
  35. override
  36. abstract
  37. get
  38. set
  39. const
  40. lateinit
  41. interface
  42. private protected internal public
  43. companion
  44. object
  45. data
  46. sealed
  47. inner 顯式聲明內(nèi)部類,區(qū)別于內(nèi)類
  48. enum
  49. by
  50. infix
  51. Unit
  52. vararg
  53. 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)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容