こんにちは😀
今回は、Enumクラスのプロパティをみてみます。
Enumクラスのデータ型には、プロパティ「name」と「ordinal」があります。
プロパティ「name」
nameを使って、書いてみましょう。
nameはEnumクラスで定義した列挙子を文字列化して取り出します。
以下のmain関数の処理は、3行目で「joinToString」関数でデータ型の集合体の文字列を取り出します。
「{it.name})」はプロパティnameを使用したラムダ式になります。
fun main(args: Array<String>) {
println(enumValues<Gadget>().joinToString {it.name})
}
クラスは、前回使用したクラスを使用します。
enum class Gadget{
speaker,
スマートウォッチ,
earphones
}
fun getGadget(ga:Gadget):String{
return when(ga){
Gadget.speaker -> “スマートスピーカー”
Gadget.スマートウォッチ -> “スマートウォッチ”
Gadget.earphones -> “ワイヤレスイヤフォン”
}
}
実行すると、列挙子が出力されていますね。
プロパティ「ordinal」
ordinalは、Enumクラスの列挙子が持つ整数のIDで、列挙した順に「0,1,2,3・・・」と割り当てられます。
以下で、新しくEnumクラスを作成します。
enum class Janken{
GU,
CHOKI,
PA
}
Enumクラスを定義するgetJankenクラスを作成します。
3行目でordinalを使用して、じゃんけん勝負の結果を算出しています。
fun getJanken(me:Janken,you:Janken):String{
val kekka = (3+you.ordinal-me.ordinal)%3
return when(kekka){
0 -> “私は${me}、あなたは${you}で、あいこです。”
1 -> “私は${me}、あなたは${you}で、私の勝ちです。”
2 -> “私は${me}、あなたは${you}で、私の負けです。”
else -> “じゃんけんしよう”
}
}
main関数で、getJankenクラスにじゃんけんの値2つを引数にして定義しています。
fun main(args: Array<String>) {
println(getJanken(Janken.CHOKI,Janken.CHOKI))
println(getJanken(Janken.GU,Janken.CHOKI))
println(getJanken(Janken.PA,Janken.CHOKI))
}
実行すると、想定通りに出力されています。
自分で追加するプロパティ
「name」「ordinal」は最初から備わっているプロパティですが、自分でプロパティを追加することもできます。
以下は、文字列型のプロパティ「ja」を追加しています。
enum class Janken(val ja:String){
GU(“グー”),
CHOKI(“チョキ”),
PA(“パー”)
}
getJankenクラスでは、「me.ja」と「you.ja」で追加したプロパティを呼び出しています。
fun getJanken(me:Janken,you:Janken):String{
・・・・・・省略・・・・・・
return when(kekka){
0 -> “私は${me.ja}、あなたは${you.ja}で、あいこです。”
1 -> “私は${me.ja}、あなたは${you.ja}で、私の勝ちです。”
2 -> “私は${me.ja}、あなたは${you.ja}で、私の負けです。”
else -> “じゃんけんしよう”
}
}
実行します。
日本語文字列を追加したことで、先ほどより結果が見やすくなりました。
最後に一言・・・
Enumクラスを作成する上で、プロパティを使えるとその情報を取得したり出力を工夫できたりできます。
使用できる幅が広がりますね。
今回はここまで🤚
では、また次回。