天天看點

Kotlin入門-變量的聲明與指派

這篇開始我們一起學習基礎文法

我們回憶下 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 的空安全設計。