Scala 3'te Enum'lar
Yeni enum sözdizimi
Scala 3'te Enum'lar, CoddyKit'te ücretsiz bir Scala for Backend Engineering & Functional Programming dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Scala for Backend Engineering & Functional Programming öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Scala for Backend Engineering & Functional Programming kursu toplamda 4 dersten oluşur.
Yeni enum Anahtar Sözcüğü
Scala 3, birinci sınıf bir enum yapısı ekler. Bu yapı, Scala 2'deki ayrıntılı mühürlü trait ve durum nesneleri örüntüsünün yerini özlü bir söz dizimiyle alır.
- Her durum, enum türünün bir değeri olur.
- Derleyici yararlı yardımcıları otomatik olarak oluşturur.
enum Color:
case Red, Green, Blue
object Main:
def main(args: Array[String]): Unit =
println(Color.Red)Tüm Değerleri Listeleme
Her basit enum, tüm durumları içeren bir dizi olan values ve ada göre arama yapan valueOf üyelerine sahip bir eşlikçi alır.
enum Color:
case Red, Green, Blue
object Main:
def main(args: Array[String]): Unit =
Color.values.foreach(println)
println(Color.valueOf("Green"))Sıra Numarası ve Ad
Her enum değeri bir ordinal (sıfır tabanlı konum) ve durum adını kullanan, oluşturulmuş bir toString değerine sahiptir.
enum Color:
case Red, Green, Blue
object Main:
def main(args: Array[String]): Unit =
println(Color.Blue.ordinal)
println(Color.Red.ordinal)Parametreli Enum'lar
Enum durumları yapıcı parametreleri alabilir ve böylece her değere ilişkili veriler sağlayabilir. Bu, RGB kodları veya gezegen kütleleri gibi sabitleri saklamak için kullanışlıdır.
enum Planet(val mass: Double):
case Earth extends Planet(5.97e24)
case Mars extends Planet(6.42e23)
object Main:
def main(args: Array[String]): Unit =
println(Planet.Earth.mass)
println(Planet.Mars.mass)Enum'lar Üzerinde Yöntemler
Bir enum gövdesinin içinde yöntemler tanımlayabilirsiniz. Bu yöntemler, bir sınıftaki yöntemler gibi her değerde kullanılabilir.
enum Direction:
case North, South, East, West
def opposite: Direction = this match
case North => South
case South => North
case East => West
case West => East
object Main:
def main(args: Array[String]): Unit =
println(Direction.North.opposite)Genel ADT Enum'ları
Enum'lar genel ve parametreli olabilir; bu sayede cebirsel veri türlerini modelleyebilirsiniz. Aşağıda basitleştirilmiş bir Option türü verilmiştir.
enum Maybe[+A]:
case Just(value: A)
case Nothing
object Main:
def main(args: Array[String]): Unit =
val a: Maybe[Int] = Maybe.Just(42)
println(a)Özyinelemeli ADT Enum'ları
Enum'lar özyinelemeli yapılarda çok kullanışlıdır. İkili bir ağaç veya bağlı liste, bir durumlar kümesi olarak temiz ve anlaşılır biçimde ifade edilir.
enum Tree[+A]:
case Leaf(value: A)
case Branch(left: Tree[A], right: Tree[A])
object Main:
def main(args: Array[String]): Unit =
val t = Tree.Branch(Tree.Leaf(1), Tree.Leaf(2))
println(t)Enum'lar Üzerinde Örüntü Eşleme
Enum'lar mühürlü olduğundan derleyici, bir match ifadesinin tüm durumları kapsayıp kapsamadığını denetleyebilir. Bir durumu eksik bırakmak uyarı oluşturur.
enum Light:
case Red, Yellow, Green
object Main:
def action(l: Light): String = l match
case Light.Red => "stop"
case Light.Yellow => "slow"
case Light.Green => "go"
def main(args: Array[String]): Unit =
println(action(Light.Green))Java ile Uyumlu Enum'lar
scala.reflect.Enum öğesinden otomatik olarak türeterek extends java.lang.Enum davranışını ekleyebilirsiniz; gerçek Java birlikte çalışabilirliği için enum X extends Enum[X] yazın... ancak çoğu kod, gerektiğinde Java ile iyi birlikte çalışabilen sade biçimi kullanır.
enum Suit:
case Hearts, Diamonds, Clubs, Spades
object Main:
def main(args: Array[String]): Unit =
println(Suit.values.length)
println(Suit.Spades.ordinal)Alanları ve Yöntemleri Birleştirme
Zengin alan modelleri oluşturmak için parametreli durumları ortak yöntemlerle birlikte kullanabilirsiniz.
enum Currency(val symbol: String):
case USD extends Currency("$")
case EUR extends Currency("\u20ac")
def format(amount: Double): String = s"$symbol$amount"
object Main:
def main(args: Array[String]): Unit =
println(Currency.USD.format(9.99))enum Ne Zaman Kullanılmalı
Kapalı bir seçenek kümeniz veya cebirsel bir veri türünüz olduğunda enum kullanın.
- Basit numaralandırmalar için yalın durumlar.
- ADT'ler ve toplam türler için parametreli durumlar.
- Otomatik tüm durum denetimleri, yeniden düzenlemeleri güvenli kılar.
enum Result[+E, +A]:
case Ok(value: A)
case Err(error: E)
object Main:
def main(args: Array[String]): Unit =
val r: Result[String, Int] = Result.Ok(7)
println(r)Hızlı Kontrol
Scala 3 enum'ları konusundaki anlayışınızı sınayın.
Özet
Scala 3 enum'larını öğrendiniz.
- Özlü
enum, mühürlü trait için gereken kalıp kodun yerini alır. - Basit enum'lar
values,valueOfveordinalüyelerini alır. - Durumlar, ilişkili veriler için parametre alabilir.
- Genel ve özyinelemeli enum'lar ADT'leri modeller.
- Mühürlü yapı, tüm durumları kapsayan örüntü eşlemeyi mümkün kılar.
enum Weekday:
case Mon, Tue, Wed, Thu, Fri
def isStart: Boolean = this == Mon
object Main:
def main(args: Array[String]): Unit =
println(Weekday.Mon.isStart)
println(Weekday.values.length)Sıkça Sorulan Sorular
“Scala 3'te Enum'lar” dersi ücretsiz mi?
Evet — “Scala 3'te Enum'lar” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Scala for Backend Engineering & Functional Programming kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Scala for Backend Engineering & Functional Programming kursu toplamda 4 dersten oluşur.
“Scala 3'te Enum'lar” dersinde ne öğreneceğim?
Yeni enum sözdizimi Scala for Backend Engineering & Functional Programming ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Scala for Backend Engineering & Functional Programming öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Scala for Backend Engineering & Functional Programming, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Scala 3'te Enum'lar” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Scala for Backend Engineering & Functional Programming dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Scala for Backend Engineering & Functional Programming dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Anlamlı Girintileme
- Scala 3'te Enum'lar
- Opak Türler
- Birleşim ve Kesişim Türleri