Kotlin 變數宣告:val 與 var
在 Kotlin 中,宣告變數只有兩個關鍵字:val 和 var。
這體現了 Kotlin 對於 不可變性 (Immutability) 的重視。
1. val (唯讀變數)
val 代表 Value (或是常數)。
一旦指派了初始值,就 不能再修改。這等同於 Java 的 final 變數。
val name = "Miko"
// name = "Jason" // 錯誤!val 不能重新賦值
編譯時期常數 (const val)
如果你需要定義一個全域的、編譯時期就確定的常數,可以使用 const val。
它通常放在檔案的最上層 (Top Level) 或 Object 中。
const val PI = 3.14159
const val APP_NAME = "MyApp"
注意:val 可以是在執行時期計算出來的值 (val time = System.currentTimeMillis()),但 const val 必須在編譯時就確定。
除非真的需要修改變數的值,否則請預設使用
val。這能讓程式碼更安全、更容易預測。2. var (可變變數)
var 代表 Variable。
你可以隨時修改它的值(但不能改變型別)。
var age = 18
age = 19 // 合法
// age = "20" // 錯誤!型別不符 (整數不能變字串)
3. 型別推斷 (Type Inference)
你有注意到上面的例子沒有寫型別嗎? Kotlin 非常聰明,它會根據你給的初始值,自動推斷出變數的型別。
val name = "Miko" // 自動推斷為 String
val age = 18 // 自動推斷為 Int
如果你想顯式宣告型別,可以用冒號 : 加上型別名稱:
val name: String = "Miko"
val age: Int = 18
4. 延遲初始化 (lateinit)
有些時候我們無法在宣告時馬上給初始值 (例如在 Android 的 onCreate 中才要初始化 View)。
這時可以使用 lateinit var。
lateinit var message: String
fun init() {
message = "Hello"
}
注意:
- 只能用於
var。 - 不能用於 Primitive Types (Int, Double, Boolean...)。
- 在存取前必須確保已經初始化,否則會噴
UninitializedPropertyAccessException。