記錄一些kotlin的用法

操作符

Elvis 操作符 ?:

val a = b?.length ?: -1

安全轉換 as?

  • 轉型不成功返回 null

null safety

var a : String? = null
a?.length //a 爲null 則pass,不爲null 則調用
a!!.length// 拋異常

類型判斷符 is

範圍操作符 : in

for(i in 1..5 step 1){}
for (i in 5 downTo 1 step 2){}

多行輸入符 “”“

  • 三個雙引號之間的內容將被原樣保留

擴展函數


run

  • 調用函數塊,塊內 this指代調用對象
  • 返回值爲最後一行
val result = "haha".run{
    println(this)
    "I'm result"
}
println(result)

apply

  • 同run,函數塊內this 指代該對象
  • 返回值爲對象自己

let

  • 函數塊內 it 指代該對象
  • 返回值最後一行

also

  • 函數塊內it 指代該對象
  • 返回值爲對象自己

with

  • 將該對象作爲函數參數
  • this 指代該對象
  • 返回值爲最後一行
val result = with"haha"){
    println(this)
    "result"
}
println(result)

修飾符

  • private 只能被自己所在的文件可見,不能在定義這個類之外的文件中使用
  • protected 可以被成員自己和繼承它的成員可見(比如,類和它的子類)
  • internal 對所在的整個module可見
  • public 最沒有限制的修飾符。這是默認的修飾符

委託屬性

  • 一個屬性具有一些相同的行爲,使用lazy或者observable可以被很有趣地實現重用。而不是一次又一次地去聲明那些相同的代碼
  • https://wangjiegulu.gitbooks.io/kotlin-for-android-developers-zh/content/biao_zhun_wei_tuo.html
  • 標準委託

    by lazy
    by observable
    by Delegates.notNull()
    by map 
    
  • 自定義委託 :

        繼承ReadWriteProperty
    by DelegatesExt.notNullSingleValue()
    
  • 操作符
  • 密封類 sealed

    • 類似枚舉,不同之處在於枚舉的實例是唯一的,而密封類可以有很多實例,它們可以有不同的狀態。

      sealed class Option<out T> {
          class Some<out T> : Option<T>()
          object None : Option<Nothing>()
      }       
      

參考:
- https://wangjiegulu.gitbooks.io/kotlin-for-android-developers-zh/content/biao_zhun_wei_tuo.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章