この文書の現在のバージョンと選択したバージョンの差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
kotlin:enumとsealed [2019/12/10 07:42] ips |
kotlin:enumとsealed [2019/12/10 08:18] (現在) ips [enumのは代数的データ型(ADT)] |
||
---|---|---|---|
ライン 54: | ライン 54: | ||
</code> | </code> | ||
- | ==== enumの条件ではelseが不要 ==== | + | ==== enumのは代数的データ型(ADT) ==== |
+ | |||
+ | 代数的データ型(Algebraic data type)とは、その型に割当可能なサブタイプの閉集合を表現できる複合型。 | ||
+ | GEARはLOW,MIDDLE,HIという閉集合を表現している。 | ||
+ | つまりGEARは3つの値しかない。 | ||
+ | |||
+ | <wrap hi>通常下記のような場合はELSEがなければコンパイルエラーとなるが、 | ||
+ | ELSEがなくても3つの条件をつければコンパイルが通る。 | ||
+ | (コンパイラーは3つしか条件がないことをわ分かっている。=閉集合)</wrap> | ||
- | GEARクラスにはLOW,MIDDLE,HIしかないことがわかっているのでIFやWHENでELSEが不要となる。 | ||
<code> | <code> | ||
ライン 63: | ライン 71: | ||
MIDDLE(60), | MIDDLE(60), | ||
HI(100); | HI(100); | ||
- | fun Accelerator(){ | ||
- | println(speed) | ||
- | } | ||
} | } | ||
ライン 73: | ライン 78: | ||
fun main(){ | fun main(){ | ||
val civic = CAR(GEAR.MIDDLE) | val civic = CAR(GEAR.MIDDLE) | ||
- | when (civic.gear){ | + | // LOW,MIDDLE,HI全てを条件にするかELSEがなければエラーになる。 |
- | GEAR.LOW -> println("too slow") | + | val message = when (civic.gear){ |
- | GEAR.MIDDLE -> println("just right") | + | GEAR.LOW -> "too slow" |
- | GEAR.HI -> println("too fast") | + | // GEAR.MIDDLE -> "just right" // コメントをはずせばELSE不要 |
+ | // GEAR.HI -> "too fast" // コメントをはずせばELSE不要 | ||
} | } | ||
+ | println(message) | ||
} | } | ||
</code> | </code> | ||
+ | {{:kotlin:pasted:20191210-080738.png}} |