iT邦幫忙

2023 iThome 鐵人賽

DAY 4
2
Kotlin

讓 Kotlin 程式碼更道地 - 談 Effective Kotlin 與相關的 Design Pattern系列 第 4

D04 : val 最好的變數是不要變,要不要聽看看你在說什麼

  • 分享至 

  • xImage
  •  

本書第一條就是安全性,其中第一個要點就是「限制可變性」。在開發過程中,可變性是一個大敵。一旦一個物件持有可變的狀態 - 例如銀行帳戶的餘額,它的行為將變得難以預測。這就增加了出錯的風險和維護的困難度。因此,在 Kotlin 中,我們儘可能用 val 取代 var,以創建不可變的變量,並使用不可變的資料結構。

Kotlin 鼓勵你使用 immutable 與支援

Kotlin 採取了主動的方法,鼓勵使用不可變性,並已將這些特性整合進語言中。其中以下三個主要特性會分天講解:

  1. 唯讀屬性 val properties
  2. 區隔可變與不可變的 collections
  3. data classes 的 copy 函式

我們今天先討論第一點 val

val 與 var

有人說 val 不好記。其實只要知道 val 代表 value 就不的很難記了。所以 val 就是一個值。而且是唯讀的。

var: 這個關鍵字允許你宣告一個可變屬性。它的值可以在初始賦值後被改變。

var mutableString: String = "Hello"
mutableString = "World"

val: 這個關鍵字讓你宣告一個唯讀屬性。一旦你給它賦值,就不能再次改變它。

val immutableString: String = "Hello"
// immutableString = "World"  // 這將導致編譯錯誤

預設使用 val,只有在絕對必要的時候才切換到 var,這是一個好的做法,因為它本質上使程式碼更加安全,特別是在多線程的環境中。

用if when 表達式特性達到 val

在 Kotlin 中,if 和 when 都可以作為表達式使用,意味著它們可以回傳值。這個特性對於 val 非常有用,因為你可以在定義一個唯讀的 val 變數時,根據條件動態地為其賦值。

以下是一些例子,展示如何使用 if 和 when 表達式與 val 結合:

使用 if 表達式:

val number = 10
val result = if (number > 5) {
    "Number is greater than 5"
} else {
    "Number is 5 or less"
}
println(result) // 輸出: "Number is greater than 5"

使用 when

val number = 3
val result = when (number) {
    1 -> "One"
    2 -> "Two"
    3 -> "Three"
    else -> "Unknown"
}
println(result) // 輸出: "Three"

這些功能對於賦值 val 變數特別有用,因為你可以確保在任何執行路徑上,val 都會被賦值一次且只有一次。

此外,使用 if 或 when 表達式可以使你的程式碼更加簡潔和可讀,因為你不需要使用臨時變數或者多餘的賦值操作。這也意味著,可以在單一地方賦值,減少了出錯的機會,並確保 val 的不可變性。

每日一推 GIDLE

今天來放金米妮的 CHANGE 吧

Yes


上一篇
D03 : 程式的安全性, 危險的可變點 (mutable point)
下一篇
D05: listOf, mapOf 就是要讓你儘量使用不可變的集合 - Immutable Collection in Kotlin
系列文
讓 Kotlin 程式碼更道地 - 談 Effective Kotlin 與相關的 Design Pattern30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言