Eksiksiz Eşleştirme
Derleyici tarafından denetlenen eksiksizlik
Eksiksiz Eşleştirme, CoddyKit'te ücretsiz bir Scala for Backend Engineering & Functional Programming dersidir. Bu, 4 dersinin 4. 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.
Tüm Durumları Kapsayan Eşleştirme Nedir?
Bir match, eşleştirilen türün olası her değerini ele aldığında tüm durumları kapsar.
Sealed bir trait için derleyici tüm varyantları bilir ve match ifadenizin hepsini kapsayıp kapsamadığını denetleyebilir.
Eksiksiz Bir Eşleştirme
Sealed bir trait'in her varyantını ele aldığınızda derleyici bunu kabul eder ve hiçbir uyarı gösterilmez.
sealed trait Color
case object Red extends Color
case object Green extends Color
case object Blue extends Color
object Main {
def name(c: Color): String = c match {
case Red => "red"
case Green => "green"
case Blue => "blue"
}
def main(args: Array[String]): Unit = {
println(name(Blue))
}
}Derleyici Sizi Kollar
Bir varyantı dışarıda bırakırsanız derleyici derleme sırasında tüm durumları kapsamayan eşleştirme uyarısı verir.
Bu bir güvenlik ağıdır: programı çalıştırmadan önce eksikliği fark edersiniz.
Daha Sonra Varyant Ekleme
Asıl fayda yeni bir varyant eklediğinizde ortaya çıkar. Kod tabanınızın her yerindeki tüm durumları kapsamayan eşleştirmeler uyarıyla görünür hâle gelir ve size yeni durumu ele almanızı hatırlatır.
Bu, yeniden düzenlemeyi güvenli ve öngörülebilir kılar.
Neden Joker Karakterden Kaçınmalı?
case _ => eklemek, tüm durumların kapsanıp kapsanmadığına ilişkin uyarıları susturur. Bu, daha sonra varyant eklediğinizde hataları gizleyebilir.
Sealed ADT'lerde her varyantı açıkça listelemeyi tercih edin; böylece derleyici sizi korumaya devam eder.
sealed trait Status
case object Active extends Status
case object Inactive extends Status
object Main {
def label(s: Status): String = s match {
case Active => "on"
case Inactive => "off"
}
def main(args: Array[String]): Unit = {
println(label(Active))
}
}Veri İçeren Durumlarda Kapsamlılık
Tüm durumları kapsama, veri taşıyan varyantlar için de geçerlidir. Alanları bağlamanız ve yine her varyantı ele almanız gerekir.
sealed trait Shape
case class Circle(r: Double) extends Shape
case class Square(s: Double) extends Shape
object Main {
def area(sh: Shape): Double = sh match {
case Circle(r) => 3.14159 * r * r
case Square(s) => s * s
}
def main(args: Array[String]): Unit = {
println(area(Circle(2)))
println(area(Square(3)))
}
}Koşul Denetimleriyle Birleştirme
Dikkatli olun: koşul denetimleri bir eşleştirmeyi tüm durumları kapsamaz hâle getirebilir; çünkü derleyici bu koşulların tüm değerleri kapsadığını kanıtlayamaz.
Kapsamlılığı korumak için aynı varyant için koşulsuz bir son durum sağlayın.
sealed trait Temp
case class Celsius(v: Int) extends Temp
object Main {
def feel(t: Temp): String = t match {
case Celsius(v) if v >= 30 => "hot"
case Celsius(v) => "not hot"
}
def main(args: Array[String]): Unit = {
println(feel(Celsius(35)))
println(feel(Celsius(10)))
}
}Option ile Kapsamlılık
Standart kütüphanedeki Option, Some ve None içeren sealed bir ADT'dir. İkisini de eşleştirmek tüm durumları kapsar.
object Main {
def show(o: Option[Int]): String = o match {
case Some(v) => s"value $v"
case None => "nothing"
}
def main(args: Array[String]): Unit = {
println(show(Some(7)))
println(show(None))
}
}İç İçe Yapılarda Kapsamlılık
Tüm durumları kapsama, iç içe ADT'lerde de yardımcı olur. Derleyici, parçalara ayırdığınız her düzeyi değerlendirir.
sealed trait Tree
case object Leaf extends Tree
case class Node(v: Int, l: Tree, r: Tree) extends Tree
object Main {
def depth(t: Tree): Int = t match {
case Leaf => 0
case Node(_, l, r) => 1 + math.max(depth(l), depth(r))
}
def main(args: Array[String]): Unit = {
println(depth(Node(1, Leaf, Node(2, Leaf, Leaf))))
}
}Neden Önemlidir?
Derleyici tarafından denetlenen tüm durumları kapsama size şunları sağlar:
- Her durumun ele alındığına dair güven
- ADT büyüdüğünde otomatik hatırlatmalar
- Daha az çalışma zamanı MatchErrors
- Daha güvenli büyük ölçekli yeniden düzenleme
Hepsini Bir Araya Getirme
Tüm durumları eksiksiz kapsayan sealed bir ADT. Buraya yeni bir varyant eklemek derleyici uyarısını tetikler.
sealed trait Command
case object Start extends Command
case object Stop extends Command
case class SetSpeed(v: Int) extends Command
object Main {
def run(c: Command): String = c match {
case Start => "starting"
case Stop => "stopping"
case SetSpeed(v) => s"speed $v"
}
def main(args: Array[String]): Unit = {
List(Start, SetSpeed(5), Stop).foreach(c => println(run(c)))
}
}Kısa Kontrol
Tüm durumları kapsayan eşleştirmeyi anlayışınızı test edin.
Özet
Tüm durumları kapsayan eşleştirme hakkında şunları öğrendiniz:
- Bir match, her varyantı kapsadığında tüm durumları kapsar
- Sealed trait'lerde derleyici bunu denetler ve eksiklikler için uyarır
- Bir varyant eklemek, eksik olan tüm eşleştirmeleri ortaya çıkarır
- Bu korumayı sürdürmek için sealed ADT'lerde
case _kullanmaktan kaçının - Koşul denetimleri kapsamlılığı bozabilir; koşulsuz bir geri dönüş durumu ekleyin
Sıkça Sorulan Sorular
“Eksiksiz Eşleştirme” dersi ücretsiz mi?
Evet — “Eksiksiz Eşleştirme” 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.
“Eksiksiz Eşleştirme” dersinde ne öğreneceğim?
Derleyici tarafından denetlenen eksiksizlik 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 4. dersidir.
“Eksiksiz Eşleştirme” 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