天天看點

kotlin學習筆記一 常用操作符

kotlin幾個基本操作符的簡介:

1.kotlin 常用高階函數

1.1 TODO() 函數抛出異常測試錯誤的函數 TODO("測試TODO函數,是否顯示抛出錯誤")

1.2 run()  函數 a.獨立執行代碼塊  b.執行根據不同條件得到不同結果的時候使用可以結合when使用  run{ code }

1.3 T.run() 函數 可以使用目前對象的上下文  T為泛型對象

1.4 with() 函數 和T.run基本類似差別在于with為正常高階函數 run為擴充高階函數且 with函數指定了傳回值(可看源碼) with(str){ code }

1.5 T.apply() 函數 執行完lanbda表達式内容後會傳回自身,是以還能繼續後續的操作 T.apply{}.apply{}.apply{}

1.6 T.also() 函數 調用自身傳回自身對象 "kotlin".also{println("結果:${it.plus("-java")}")} ----> kotlin-java

1.7 T.let() 函數  T ?.let{ } a.規避空指針;  b. 對本身進行操作,這是上述幾個實作不了的"kotlin".let{it.reversed()}.let{it.plus("-java")}.let {println("新的字元串:$it"}

1.8 T.takeIf() 函數 傳入希望的條件如果符合這傳回自身,否則傳回null  "str".takeIf{ it.startWith("ko")}

1.9 T.takeUnless 函數和takeIf 用法一緻作用相反

1.10 repeat(count){ code } 函數根據傳入的次數重複執行code  count為5 即會執行5次

1.11 lazy(){} 函數 用于延遲加載  變量 by lazy{ 變量初始化值 }
           

2.kotlin基礎知識點

2.1 enum class color(val r: Int,val g: Int,val b: Int){
        RED(255,0,0),ORANGE(255, 165, 0), BLUE(0, 0, 255);
        fun rgb() = (r * 256 + g) * 256 + b
    }
    此處是kotlin唯一必須使用 ; 的地方 枚舉類中定義任何方法就要使用 ; 将枚舉常量清單和方法分開
    
2.2 when結構中可以使用任意對象,可以是有傳回值的表達式或者函數
           

3.基本操作符

3.1 ?  表示對象可空 b?.length  未? 而直接聲明的變量不可賦null//如果 b非空,就傳回 b.length ,否則傳回 null,這個表達式的類型是 Int? 

3.2 ?. 安全調用運算符不為空進行操作,反之傳回null

3.3 ?: 類似java裡的三元運算符 左側為空則傳回右側,反之傳回左側 又稱elvis操作符

3.4 !! 不為空則進行操作,反之抛出異常

3.5 ==與===  前者判斷值是否相等 後者判斷值和引用是否都相等

3.6 ..  until in !in  ..表示x到y閉區間  until表示前閉後開  in表示在區間  !in 表示不在區間

3.7 downTo()  倒序周遊 for (i in 4 downTo 1){print(i) } //倒叙周遊

3.8 step() 步進  (i in 4 downTo 1 step 2) print(i) // prints "42"

3.9 :: 得到類的class對象 startActivity(Intent([email protected], MainActivity::class.java))

3.10 @ (1) 限制this類型 如上       (2)标簽  暫未了解透徹

3.11 as? 轉換類型 當使用as轉換類型的時候可能遇到異常, as? 如果轉換錯誤就傳回null了

3.12 is 類型判斷符,無需顯示轉換後再判斷,直接進行判斷即可

3.13 三個雙引号多行文本保留原本格式

3.14 $ 模闆表達式,會求值并把結果包含到字元串中  "${g+h}"  "$value"  "${'$'}" 最後一個是将$符号本身包含到字元串中

3.15 let操作符 配合?. 一起用 ?.let{ it元素不為空 }

3.16 lateinit 延遲初始化var修飾的變量 常用于延遲初始化非空變量一遍後續使用,避免每次引用變量都需判空