Mühürlü Trait'ler
Kapalı hiyerarşiler
Mühürlü Trait'ler, 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.
Trait Nedir?
Bir trait, bir arayüz gibidir: diğer sınıfların genişletebileceği ortak bir tür tanımlar.
Trait'ler, ilişkili türleri tek bir çatı altında gruplamanızı sağlar; böylece bu türler birbirlerinin yerine kullanılabilir.
Temel Bir Trait
Bir trait'i trait ile tanımlayın, ardından sınıfların veya nesnelerin onu extends etmesini sağlayın.
trait Shape
case class Circle(r: Double) extends Shape
case class Square(side: Double) extends Shape
object Main {
def main(args: Array[String]): Unit = {
val s: Shape = Circle(2.0)
println(s)
}
}sealed Ne Anlama Gelir?
sealed bir trait yalnızca aynı dosyada tanımlanan türler tarafından genişletilebilir.
Bu, hiyerarşiyi kapatır: derleyici olası alt türlerin tam listesini bilir.
sealed trait Color
case object Red extends Color
case object Green extends Color
case object Blue extends Color
object Main {
def main(args: Array[String]): Unit = {
val c: Color = Green
println(c)
}
}Varyant Olarak Case Object'ler
Bir varyant veri içermediğinde case class yerine case object kullanın. Her zaman yalnızca tek bir örneği vardır.
Bu, numaralandırma benzeri değerler için idealdir.
sealed trait Direction
case object North extends Direction
case object South extends Direction
object Main {
def main(args: Array[String]): Unit = {
val d: Direction = North
println(d)
}
}Nesneleri ve Sınıfları Birlikte Kullanma
Bir sealed trait hem case object varyantlarına (veri yok) hem de case class varyantlarına (veri var) sahip olabilir.
sealed trait Event
case object Started extends Event
case class Failed(reason: String) extends Event
object Main {
def main(args: Array[String]): Unit = {
val e: Event = Failed("timeout")
println(e)
}
}Sealed Trait Üzerinde Eşleştirme
Trait üzerinde eşleştirme yapar ve her varyantı ele alırsınız. Hiyerarşi sealed olduğu için derleyici tüm varyantları kapsadığınızı doğrulayabilir.
sealed trait Color
case object Red extends Color
case object Green extends Color
case object Blue extends Color
object Main {
def hex(c: Color): String = c match {
case Red => "#FF0000"
case Green => "#00FF00"
case Blue => "#0000FF"
}
def main(args: Array[String]): Unit = {
println(hex(Green))
}
}Derleyici Uyarıları
Sealed bir trait üzerinde yapılan eşleştirmede bir varyantı unutursanız derleyici eksik durumu bildirir.
Bu, daha sonra yeni bir varyant eklediğinizde hataları yakalar. Bunu tüm durumları kapsayan eşleştirme dersinde ayrıntılı olarak inceleyeceğiz.
Trait'ler Üye Tanımlayabilir
Bir trait, tüm alt türlerin paylaştığı veya uygulamak zorunda olduğu yöntemleri ya da alanları tanımlayabilir.
sealed trait Animal {
def sound: String
}
case object Dog extends Animal { def sound = "Woof" }
case object Cat extends Animal { def sound = "Meow" }
object Main {
def main(args: Array[String]): Unit = {
println(Dog.sound)
println(Cat.sound)
}
}Neden Sealed Kullanılır?
Bir trait'i sealed yapmak size şunları sağlar:
- Bilinen, kapalı bir alt tür kümesi
matchiçinde tüm durumların kapsanıp kapsanmadığını denetleme- Varyant eklerken daha güvenli yeniden düzenleme
Sealed trait'ler ve case class'lar, Scala'nın cebirsel veri türlerini oluşturma biçimidir.
Hiyerarşiyi Kullanma
Fonksiyonlar trait türünü kabul edebilir ve kalıp eşleştirme aracılığıyla gönderim yaparak herhangi bir varyantla çalışabilir.
sealed trait Payment
case class Cash(amount: Int) extends Payment
case class Card(number: String) extends Payment
object Main {
def summary(p: Payment): String = p match {
case Cash(a) => s"cash $a"
case Card(n) => s"card ending ${n.takeRight(4)}"
}
def main(args: Array[String]): Unit = {
println(summary(Cash(50)))
println(summary(Card("123456789012")))
}
}Hepsini Bir Araya Getirme
Her durumu eşleştiren bir fonksiyonla paylaşılan, farklı varyantlara sahip sealed bir trait.
sealed trait Result
case object Pending extends Result
case class Success(value: Int) extends Result
case class Error(msg: String) extends Result
object Main {
def show(r: Result): String = r match {
case Pending => "waiting"
case Success(v) => s"ok: $v"
case Error(m) => s"fail: $m"
}
def main(args: Array[String]): Unit = {
List(Pending, Success(7), Error("boom")).foreach(r => println(show(r)))
}
}Kısa Kontrol
Sealed trait'leri anlayışınızı test edin.
Özet
Sealed trait'ler hakkında şunları öğrendiniz:
- Bir
trait, ortak bir üst tür tanımlar sealed, alt türleri aynı dosyayla sınırlar- Veri içermeyen varyantlar için
case object, veri içeren varyantlar içincase classkullanın - Sealed yapmak,
matchiçinde tüm durumların kapsanıp kapsanmadığının denetlenmesini sağlar
Sıkça Sorulan Sorular
“Mühürlü Trait'ler” dersi ücretsiz mi?
Evet — “Mühürlü Trait'ler” 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.
“Mühürlü Trait'ler” dersinde ne öğreneceğim?
Kapalı hiyerarşiler 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.
“Mühürlü Trait'ler” 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
- Case Sınıfları
- Mühürlü Trait'ler
- Cebirsel Veri Türleri
- Eksiksiz Eşleştirme