Kotlin (1): lateinit

 


(上圖說明:  Google讓學習Java的工程師變成了上世紀的老人,如果不學習kotlin的話...)

android工程師被迫要學kotlin,明明java已經好用了,且工程師的程式觀念培養不易,學了幾年的java,一下子被google強迫大家要摒棄JAVA,學一套新語言,你說氣不氣.像是APPLE就對開發者好些,直接聲明放棄Objective C,大家都改用SWIFT.所以google這更換程式語言的作法簡直就是多頭馬車,造成ANDROID界程式碼的管理上會混亂.一下Kotlin,一下java.
總之,我是在憤怒之下開始被迫學習kotlin.2022開始,好像不學習Kotlin似乎是丟臉的工程師.

-----
Kotlin對android開發專案的改變:
在 build.gradle 會新增幾行:
plugins {
id 'com.android.application'
id 'kotlin-android'
}
可以發現Dependencies會多幾個-ktx的相關套件.
dependencies {

implementation 'androidx.core:core-ktx:1.8.0'
implementation 'androidx.appcompat:appcompat:1.4.2'
implementation 'androidx.navigation:navigation-fragment-ktx:2.4.2'
implementation 'androidx.navigation:navigation-ui-ktx:2.4.2'
}

來看看程式碼:
class MainActivity : AppCompatActivity() {

private lateinit var appBarConfiguration: AppBarConfiguration
private lateinit var binding: ActivityMainBinding

上面的lateinit 是甚麼意思呢?

答案是: lateinit 為延遲初始化 的意思. (其實很好記 late + init  遲一些時間我再init這變數.)

表示我們能確定這個變數在後續一定會被初始化,就加上這修飾字.

這樣的話compiler就不會跟我們警告說要使用?來判斷這個變數是否為空。
因為我們能100%確定這變數之後會被指派,就不要警告我了.
但是這樣也要小心,萬一之後沒有指派值,就使用的話,可是會直接APP當機的.
Caused by: kotlin.UninitializedPropertyAccessException: lateinit property binding has not been initialized

但是如果直接拿掉lateinit 會怎樣?
這會導致android studio 發出一個紅色Error顯示 Property must be initialized or be abstract.
這樣程式連執行都不能執行.


基本上JAVA沒有這個關鍵字,所以這是新的東西.

JAVA如果一個變數是NULL,然後這變數被執行, 就直接NullPointerException.

因此會造成當機或是拋出例外,這就是app常常會突然當掉閃退的原因.

所以Kotlin在這方面會做一個簡易的檢查,防止null exception 的產生.間接的大幅減少app閃退的狀況發生.




留言

這個網誌中的熱門文章

最爛的銀行服務-玉山銀行

Mark App Design Apps - Terms and Privacy Policy (服務條款,隱私權政策)

SMR疊瓦式hdd致命缺陷被解決????!!!

google play 正式發布前測試報告...非常好用.

更改google drive預設存放目錄位置Change Google Drive Default Folder Location in Windows

ios app 上架時app icon要注意事項

舊有app在Android 12 閃退問題& app Splash screens

app bundle and bundletool. 關於aab安裝問題

關於google play console app應用程式簽署

Google Play badge徽章產生器