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つの値しかない。
通常下記のような場合はELSEがなければコンパイルエラーとなるが、
ELSEがなくても3つの条件をつければコンパイルが通る。
(コンパイラーは3つしか条件がないことをわ分かっている。=閉集合)
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 -> "too slow" // GEAR.MIDDLE -> "just right" // コメントをはずせばELSE不要 // GEAR.HI -> "too fast" // コメントをはずせばELSE不要 } println(message) }