這篇開始我們一起學習基礎文法
我們回憶下 Java 裡聲明一個 View 類型的變量的寫法:
//Java
View v;
Kotlin 裡聲明一個變量的格式是這樣的:
//Kotlin
var v: View
這裡有幾處不同:
- 有一個
關鍵字var
- 類型和變量名位置互換了
- 中間是用冒号分隔的
- 結尾沒有分号(對,Kotlin 裡面不需要分号)
看上去隻是文法格式有些不同,但如果真這麼寫,IDE 會報錯:
//Kotlin
class Sample {
var v: View
// 這樣寫 IDE 會報如下錯誤
// Property must be initialized or be abstract
}
這個提示是在說,屬性需要在聲明的同時初始化,除非你把它聲明成抽象的。
- 那什麼是屬性呢?這裡我們可以簡單類比 Java 的 field 來了解 Kotlin 的 Property,雖然它們其實有些不一樣,Kotlin 的 Property 功能會多些。
- 變量居然還能聲明成抽象的?嗯,這是 Kotlin 的功能,不過這裡先不理它,後面會講到。
屬性為什麼要求初始化呢?因為 Kotlin 的變量是沒有預設值的,這點不像 Java,Java 的 field 有預設值:
//Java
String name; // 預設值是 null
int count; // 預設值是 0
但這些 Kotlin 是沒有的。不過其實,Java 也隻是 field 有預設值,局部變量也是沒有預設值的,如果不給它初始值也會報錯:
//Java
void run() {
int count;
count++;
// IDE 報錯,Variable 'count' might not have been initialized
}
既然這樣,那我們就給它一個預設值 null 吧,遺憾的是你會發現仍然報錯
//Kotlin
class Sample {
var v: View = null
// 這樣寫 IDE 仍然會報錯,Null can not be a value of a non-null type View
}
又不行,IDE 告訴我需要賦一個非空的值給它才行,怎麼辦?Java 的那套不管用了。
其實這都是 Kotlin 的空安全設計相關的内容。很多人嘗試上手 Kotlin 之後快速放棄,就是因為搞不明白它的空安全設計,導緻代碼各種拒絕編譯,最終隻能放棄。是以咱先别急,下篇文章我們一起來學習一下 Kotlin 的空安全設計。