Kotlin學習之旅(D5)-高級語法

Kotlin學習之旅第五天

今天的主題是:高級語法

前言

Kotlin學習之旅(D1)-學習計劃&基本語法

Kotlin學習之旅(D2)-基本語法

Kotlin學習之旅(D3)-類與繼承

Kotlin學習之旅(D4)-函數與Lambda表達式

高級語法

空安全

寫過Java代碼的人都知道,空指針異常是時刻都要注意的,特別是在Android裏面,一個NullPointerException就會讓App Crash,因此在Kotlin裏面,爲了消除來自代碼空引用的危險,默認引用是不能爲空的。關於空指針異常,這裏還有個趣聞:《十億美元的錯誤》

在Kotlin裏面,如果允許某個變量爲null,我們可以通過 “ ? ” 來表示:

var b: String? = "abc"
b = null // ok

var a: String = "abc"
a = null // 編譯錯誤

如果變量是可以爲空的,那麼每次都需要顯示檢查是否爲null:

val l = if(b != null) b.length - 1

或者,通過安全調用操作符 -> " ?. "

fun main(args: Array<String>) {
    val a = "Kotlin"
    val b: String? = null
    println(b?.length)    // 如果b爲null,則返回null
    println(a?.length)
}

!!操作符

這個操作符在kotlin裏面經常都能看到,他的作用就是:非空斷言操作符。例如: a!! ,如果a爲null,那麼就會拋出異常,如果不爲null,則返回a的值

因此,如果你不希望NPE沒有被捕獲而導致appcrash,也不希望字符串爲null但是沒有處理,那麼你就需要使用!!操作符,在變量爲null的時候會拋出異常,我們就能在控制檯看到了。

異常

在Kotlin中,我們使用throw - Exception 來拋出異常:

throw Exception("this is an exception")

使用try來捕獲異常:

try {
    
} catch (e: Exception){
    
} finally {
    
}

這個語法結構和Java裏面是很類似的

反射

類引用

在反射中我們用的比較多的就是**類引用**

val c = MyClass::class

該引用是 KClass 類型的值。

請注意,Kotlin 類引用與 Java 類引用不同。要獲得 Java 類引用, 請在 KClass 實例上使用 .java 屬性。

函數引用

通常我們會直接調用函數,通過 xxx() 來調用,但是我們也可以把函數傳給另外一個函數當參數,使用的也是 ::操作符

fun isOdd(x: Int) = x % 2 != 0

fun main(args: Array<String>) {
    val numbers = listOf(1, 2, 3)
    println(numbers.filter(::isOdd))
}

在這個例子裏面,我們首先定義了一個函數isOdd() 判斷參數x是否爲奇數,在main函數裏,我們把這個方法作爲參數傳到了filter()方法裏,這裏其實是把函數當成 函數類型的值 ,這個和Lambda表達式有點類似,都是把函數作爲參數。

屬性引用

同樣,我們也是使用::來引用屬性

val x = 1
fun main(args: Array<String>) {
    println(::x.get())
    println(::x.name) 
}

在這裏,表達式 ::x 的意思是:

求值爲 KProperty<Int> 類型的屬性對象,它允許我們使用 get() 讀取它的值,或者使用 name屬性來獲取屬性名。更多信息請參見關於 KProperty 類的文檔

總結

除了上面說的這幾個語法,其實官方文檔還有別的,例如:註解,類型別名,類型安全的構造器等等,我覺得這些語法用的都比較少,在看到或者需要用到的時候再去了解也可以,所以這裏就沒講。

其實Kotlin的語法和Java還是很相像的,只是有一些技巧或者特性,需要在實踐中掌握,從而提高開發效率。因此明天開始我們就會進入:Kotlin Idioms 環節,介紹一些好用的開發技巧~

Day 5 - Learn Kotlin Trip, Completed.


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