この文書の現在のバージョンと選択したバージョンの差分を表示します。
| 両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
|
kotlin:enumとsealed [2019/12/10 07:35] ips |
kotlin:enumとsealed [2019/12/10 08:18] (現在) ips [enumのは代数的データ型(ADT)] |
||
|---|---|---|---|
| ライン 53: | ライン 53: | ||
| 100 | 100 | ||
| </code> | </code> | ||
| + | |||
| + | ==== enumのは代数的データ型(ADT) ==== | ||
| + | |||
| + | 代数的データ型(Algebraic data type)とは、その型に割当可能なサブタイプの閉集合を表現できる複合型。 | ||
| + | GEARはLOW,MIDDLE,HIという閉集合を表現している。 | ||
| + | つまりGEARは3つの値しかない。 | ||
| + | |||
| + | <wrap hi>通常下記のような場合はELSEがなければコンパイルエラーとなるが、 | ||
| + | ELSEがなくても3つの条件をつければコンパイルが通る。 | ||
| + | (コンパイラーは3つしか条件がないことをわ分かっている。=閉集合)</wrap> | ||
| + | |||
| + | |||
| + | |||
| + | <code> | ||
| + | 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) | ||
| + | } | ||
| + | </code> | ||
| + | {{:kotlin:pasted:20191210-080738.png}} | ||