【Kotlin 入門指南】系列文章目錄:https://bit.ly/3t8awwL
Kotlin 線上課程教學影片:https://bit.ly/3qJ5a5Q
在 Kotlin 程式語言中,列舉類別 (Enum classes) 可以定義一組具有固定名稱和值的常數。我們通常會使用列舉類別來表示一組相關的狀態或選項,例如:顏色(黃、綠、紅)、方向(東、南、西、北)、技能等級(高、中、低)。
enum class Color {
YELLOW,
GREEN,
RED
}
fun main() {
println("${Color.YELLOW.ordinal} : ${Color.YELLOW.name}")
}
輸出結果
0 : YELLOW
在這一個範例中,我們建立了一個名為Color
的列舉類別,其中包含了YELLOW
、GREEN
和RED
三種不同的顏色。每個列舉成員都是Color
類別的一個實例,而這些實例可以像常規類別一樣被引用。例如,你可以透過Color.YELLOW
來存取YELLOW
這個列舉成員。而其中ordinal
屬性代表了該列舉成員在列舉類別中的索引位置,從0開始計算。name
屬性則代表了該列舉成員的名稱。
在main
函數中,你使用了Color.YELLOW.ordinal
和Color.YELLOW.name
來取得YELLOW
這個列舉成員的索引位置和名稱。通過這段程式碼,你可以得到0 : YELLOW
的輸出結果。
這樣的設計可以讓程式中更方便地使用預定義的命名常數,使得程式碼更易讀、易懂。列舉類別在許多情況下都是一個有用且方便的程式設計元素,特別是當你需要定義一個固定且有限的集合時。
建立一個列舉(enum)時,可以為每個列舉實例指定一個初始值。這個初始值可以是任何 Kotlin 支援的類型,像是整數、字串等。
enum class Level(val title: String) {
HIGH("高級"),
MIDDLE("中級"),
LOW("初級"),
}
fun main() {
println("${Level.HIGH.ordinal}, ${Level.HIGH.name}, ${Level.HIGH.title}")
}
在這個範例中,每個列舉實例(HIGH、MIDDLE、LOW)都有一個與之關聯的字串初始值,我們印出 Level.HIGH
等級的相關資訊,代表了該等級的說明。例如,HIGH 等級的初始值為 "高級",而 MIDDLE 等級的初始值為 "中級",以此類推。
透過Level.HIGH.ordinal
會回傳該列舉實例在列舉類別中的序數(從零開始計算)。而 Level.HIGH.name
則會取得該列舉實例的名稱,這裡會是 "HIGH"。最後,我們可以透過 Level.HIGH.title
取得這個等級的名稱,也就是 "高級"。
這種方式能讓你以清晰且易讀的方式管理固定集合的值,在需要時輕鬆地使用它們。
建立列舉(enum)時,可以為列舉類別定義函數。這些函數可以用來執行與列舉類別相關的操作,讓程式碼更有結構性且易於擴展。
data class LevelData(var title: String)
enum class Level(private var data: LevelData) {
HIGH(LevelData("高級")),
MIDDLE(LevelData("中級")),
LOW(LevelData("初級")),
; //列舉結束符號
fun show() = "${data.title}"
fun update(levelData: LevelData) {
println("更新前資料:${data.title}")
this.data.title = levelData.title
println("更新後資料:${data.title}")
}
}
fun main() {
println(Level.LOW)
println(Level.LOW.show())
Level.LOW.update(LevelData("入門"))
}
在這個範例中,我們建立一個 LevelData
的資料類別(data class),這個類別只有一個名為 title
的可變字串屬性。
接著,我們建立了一個名為 Level
的列舉類別(enum class),裡面包含了三個列舉實例:HIGH、MIDDLE 和 LOW。每個列舉實例都帶有一個對應的 LevelData
物件,代表不同等級的標題。
列舉實例包含了兩個函數:show()
和 update(levelData: LevelData)
。show()
函數返回該列舉實例對應的標題,而 update(levelData: LevelData)
函數用於更新列舉實例的標題資料。
接著在 main()
函數中,println(Level.LOW)
印出 LOW 列舉實例。println(Level.LOW.show())
印出 LOW 列舉實例對應的標題。Level.LOW.update(LevelData("入門"))
更新 LOW 列舉實例的標題為 "入門"