この文書の現在のバージョンと選択したバージョンの差分を表示します。
次のリビジョン | 前のリビジョン | ||
kotlin:enumとsealed [2019/12/10 07:22] ips 作成 |
kotlin:enumとsealed [2019/12/10 08:18] (現在) ips [enumのは代数的データ型(ADT)] |
||
---|---|---|---|
ライン 2: | ライン 2: | ||
===== enumクラス ===== | ===== enumクラス ===== | ||
+ | |||
+ | GEARクラスのLOW,MIDDLE,HIというインスタンスということを宣言している。 | ||
+ | |||
+ | ==== enumの基本 ==== | ||
<code kotlin> | <code kotlin> | ||
ライン 15: | ライン 19: | ||
HI | HI | ||
</code> | </code> | ||
+ | |||
+ | ==== enumのコンストラクタ ==== | ||
+ | |||
+ | <code kotlin> | ||
+ | enum class GEAR(val speed:Int){ // クラスなのでコンストラクタにプロパティの宣言ができる。 | ||
+ | LOW(10), | ||
+ | MIDDLE(60), | ||
+ | HI(100) | ||
+ | } | ||
+ | fun main(){ | ||
+ | println(GEAR.HI.speed) | ||
+ | } | ||
+ | ↓ | ||
+ | 100 | ||
+ | </code> | ||
+ | |||
+ | ==== enumの関数宣言 ==== | ||
+ | |||
+ | <code kotlin> | ||
+ | enum class GEAR(val speed:Int){ | ||
+ | LOW(10), | ||
+ | MIDDLE(60), | ||
+ | HI(100); // 「;」で区切る | ||
+ | // クラスなので関数宣言ができる | ||
+ | fun Accelerator(){ | ||
+ | println(speed) | ||
+ | } | ||
+ | } | ||
+ | fun main(){ | ||
+ | GEAR.HI.Accelerator() | ||
+ | } | ||
+ | ↓ | ||
+ | 100 | ||
+ | </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}} |