Enum Sınıfları
Coddy'nin Kotlin Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 33 / 57.
Bir enum class, sabit bir değer kümesine, yani sabitlerine sahip bir tür bildirir. Her sabit, name ve 0'dan başlayan konumunu belirten bir ordinal değerine sahip enum nesnesidir. entries bunları sırayla listeler:
enum class Direction { NORTH, EAST, SOUTH, WEST }main içinde:
val d = Direction.EAST
println(d)
println(d.ordinal)
println(Direction.entries)Çıktı:
EAST
1
[NORTH, EAST, SOUTH, WEST]Enum sabitleri, enum oluşturucusuna geçirilen özelliklere sahip olabilir ve enum metotlar tanımlayabilir. Noktalı virgül, üyelerden önce sabitler listesini sonlandırır:
enum class Coin(val cents: Int) {
PENNY(1), NICKEL(5), DIME(10), QUARTER(25);
fun label() = "${name.lowercase()} ($cents c)"
}main içinde:
println(Coin.DIME.label())
println(Coin.entries.sumOf { it.cents })Çıktı:
dime (10 c)
41Her sabiti listeleyen bir enum üzerindeki when için else gerekmez ve derleyici eksik olan sabiti bildirir. valueOf("SOUTH"), tam adıyla bir sabiti bulur ve bilinmeyen bir sabit için hata verir; bu nedenle girdi genellikle entries.find ile eşleştirilir:
enum class Direction { NORTH, EAST, SOUTH, WEST }
fun turnRight(d: Direction) = when (d) {
Direction.NORTH -> Direction.EAST
Direction.EAST -> Direction.SOUTH
Direction.SOUTH -> Direction.WEST
Direction.WEST -> Direction.NORTH
}
fun parse(text: String) = Direction.entries.find { it.name == text.uppercase() }main içinde:
println(turnRight(Direction.valueOf("SOUTH")))
println(parse("north"))
println(parse("up"))Çıktı:
WEST
NORTH
nullBir sabitin kendi gövdesi olabilir ve burada bir metodu geçersiz kılabilir. Enum'da metodu abstract olarak bildirmek, her sabitin bu metodu uygulamasını zorunlu kılar:
enum class Op(val symbol: String) {
PLUS("+") {
override fun apply(a: Int, b: Int) = a + b
},
TIMES("*") {
override fun apply(a: Int, b: Int) = a * b
};
abstract fun apply(a: Int, b: Int): Int
}main içinde:
for (op in Op.entries) println("6 ${op.symbol} 3 = ${op.apply(6, 3)}")Çıktı:
6 + 3 = 9
6 * 3 = 18Görev
KolaySize enum'unu SMALL (250 ml, fiyat 300), MEDIUM (350 ml, 380) ve LARGE (500 ml, 450) sabitleriyle tamamla; fiyatlar cent cinsindendir. label(), medium (350 ml): 3.80 döndürür ve upsize(), bir sonraki büyük boyutu veya LARGE için aynı boyutu döndürür. Companion nesnesinin parse(text) işlevi, büyük/küçük harf duyarlılığını yok sayarak ada göre veya ilk harfe göre (s, M) bir boyut bulur ve aksi durumda null döndürür.
Sağlanan kod medium, L veya up small (büyütülmüş içecek) gibi siparişleri okur ve her etiketi veya unknown size x ifadesini yazdırır; son olarak total: 11.10 yazdırılır.
Kodun Size.kt dosyasına yazılmalıdır. Main.kt, sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.
Kendin dene
fun main() {
// Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
val input = generateSequence(::readLine).toList()
var total = 0
for (line in input) {
val upsize = line.startsWith("up ")
val size = Size.parse(line.removePrefix("up "))
if (size == null) {
println("unknown size $line")
continue
}
val chosen = if (upsize) size.upsize() else size
println(chosen.label())
total += chosen.price
}
println("total: %d.%02d".format(total / 100, total % 100))
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1Sınıflar ve Nesneler
Dosyalarla ÇalışmaSınıfları TanımlamaBirincil Yapıcılarinit Blokları ve Doğrulamaİkincil YapıcılarTekrar - Kütüphane Kartı4Kalıtım
Açık Sınıflar ve Alt SınıflarÜyeleri Geçersiz Kılmasuper ve YapıcılarSoyut SınıflarTekrar - Personel Dizini7Özel Sınıflar
Veri SınıflarıEnum SınıflarıMühürlü Hiyerarşilerequals, hashCode, toStringTekrar - Sipariş Takipçisi2Özellikler ve Kapsülleme
Özel ErişimcilerGörünürlük DeğiştiricileriÖzel Setter'larlazy ve lateinitTekrar - Banka Hesabı5Arayüzler
Arayüz BildirimleriVarsayılan MetotlarBirden Çok ArayüzTür Olarak ArayüzlerÖzet - Ödeme Yöntemleri8Generic'ler
Generic FonksiyonlarGeneric SınıflarTür Kısıtlamalarıin ve out ile VaryansTekrar - Öncelik Kuyruğu11Proje: Kütüphane Yönetimi
Kitaplar ve ÜyelerKitap Ödünç AlmaKendi başına pratik yap: Kotlin playground