Kotlinでユーザー定義型の列挙型と構造体のメリットをメモします。
fun main() {
val meetingPlace = 4
when (meetingPlace) {
1 -> {
println("警察署")
}
2 -> {
println("消防署")
}
3 -> {
println("病院")
}
}
}
まず、集合場所(meetingPlace)を数値で指定した時、上記のコードでは1、2、3が何を表しているのか分かりにくく、それ以外の数値が入った場合にはエラーとなってしまいます。
enum class PublicServices { POLICESTATION, FIREDEPARTMENT, HOSPITAL }
fun main() {
val meetingPlace: PublicServices
meetingPlace = PublicServices.HOSPITAL
when (meetingPlace) {
PublicServices.POLICESTATION -> {
println("警察署")
}
PublicServices.FIREDEPARTMENT -> {
println("消防署")
}
PublicServices.HOSPITAL -> {
println("病院")
}
}
}
そこで列挙型PublicServices
を作成し、meetingPlace
に型を指定すれば、それ以外の値が入ることは無くなり、コードを読むだけで何の処理なのかを理解できます。
次は構造体のメリットです。
fun main() {
val classes = "勇者"
val hitPoints = 10
val magicPoints = 13
val attack = 8.0
val defence = 7.0
val agility = 6.0
val classes2 = "戦士"
val hitPoints2 = 15
val magicPoints2 = 3
val attack2 = 9.0
val defence2 = 7.5
val agility2 = 4.0
val classes3 = "僧侶"
val hitPoints3 = 8
val magicPoints3 = 20
val attack3 = 7.0
val defence3 = 6.5
val agility3 = 5.5
// 処理が続く
}
ゲームでプレイヤーのステータスを設定する時、そのまま書くとキャラとそのステータスを登録した人数分だけ変数定義します。これだと変数classes2
やmagicPoints3
が何を表しているのか分かりにくいし、処理が複雑になるほど変数の管理が大変になり記述ミスやエラーが起こりやすくなってしまいます。
data class Character(
val classes: String,
val hitPoints: Int,
val magicPoints: Int,
val attack: Double,
val defence: Double,
val agility: Double
)
fun main() {
val hero = Character("勇者", 10, 13, 8.0, 7.0, 6.0)
val warrior = Character("戦士", 15, 3, 9.0, 7.5, 4.0)
val priest = Character("僧侶", 8, 20, 7.0, 6.5, 5.5)
// 処理が続く
}
構造体Character
作成すれば、変数は登録キャラの人数分だけで済みます。これにより記述ミスが減り、エラーが起こりにくくなり可読性も上がります。
参照