以前のリビジョンの文書です
GEARクラスのLOW,MIDDLE,HIというインスタンスということを宣言している。
enum class GEAR(){ LOW, MIDDLE, HI } fun main(){ println(GEAR.HI) } ↓ HI
enum class GEAR(val speed:Int){ // クラスなのでコンストラクタにプロパティの宣言ができる。 LOW(10), MIDDLE(60), HI(100) } fun main(){ println(GEAR.HI.speed) } ↓ 100
enum class GEAR(val speed:Int){ LOW(10), MIDDLE(60), HI(100); // 「;」で区切る // クラスなので関数宣言ができる fun Accelerator(){ println(speed) } } fun main(){ GEAR.HI.Accelerator() } ↓ 100
代数的データ型(Algebraic data type)とは、その型に割当可能なサブタイプの閉集合を表現できる複合型。
GEARはLOW,MIDDLE,HIという閉集合を表現している。
つまりGEARは3つの値しかない。(3つある)
そのため下記のような場合はELSEがないければコンパイラーがエラーをだしてくれる。
enum class GEAR(val speed:Int){
LOW(10),
MIDDLE(60),
HI(100);
}
class CAR(val gear: GEAR){
}
fun main(){
val civic = CAR(GEAR.MIDDLE)
// LOW,MIDDLE,HI全てを条件にするかELSEがなければエラーになる。
val message = when (civic.gear){
GEAR.LOW -> println("too slow")
// GEAR.MIDDLE -> println("just right")
// GEAR.HI -> println("too fast")
}
println(message)
}