0Pricing
Scala for Backend Engineering & Functional Programming · Lektion

Versiegelte Traits

Geschlossene Hierarchien

Versiegelte Traits ist eine kostenlose Scala for Backend Engineering & Functional Programming-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Scala for Backend Engineering & Functional Programming-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Scala for Backend Engineering & Functional Programming-Kurs umfasst insgesamt 4 Lektionen.

Was ist ein Trait?

Ein trait ähnelt einem Interface: Es deklariert einen gemeinsamen Typ, den andere Klassen erweitern können.

Traits ermöglichen es, verwandte Typen unter einem gemeinsamen Obertyp zu gruppieren, sodass sie austauschbar verwendet werden können.

Ein einfaches Trait

Deklarieren Sie ein Trait mit trait und lassen Sie Klassen oder Objekte es mit extends erweitern.

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)
  }
}

Was bedeutet sealed?

Ein sealed Trait kann nur von Typen erweitert werden, die in derselben Datei deklariert sind.

Damit wird die Hierarchie geschlossen: Der Compiler kennt die vollständige Liste möglicher Untertypen.

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)
  }
}

Case-Objekte als Varianten

Wenn eine Variante keine Daten enthält, verwenden Sie case object statt case class. Es gibt immer nur eine Instanz.

Das eignet sich ideal für enum-artige Werte.

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)
  }
}

Objekte und Klassen kombinieren

Ein sealed Trait kann sowohl Varianten als case object (ohne Daten) als auch Varianten als case class (mit Daten) enthalten.

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)
  }
}

Pattern Matching für ein sealed Trait

Sie führen ein Matching auf dem Trait durch und behandeln jede Variante. Da die Hierarchie sealed ist, kann der Compiler prüfen, ob Sie alle Varianten abgedeckt haben.

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))
  }
}

Compiler-Warnungen

Wenn Sie beim Matching über ein sealed Trait eine Variante vergessen, warnt der Compiler Sie vor dem fehlenden Fall.

Das erkennt Fehler, wenn Sie später eine neue Variante hinzufügen. In der Lektion zum vollständigen Matching sehen wir uns das ausführlich an.

Traits können Member deklarieren

Ein Trait kann Methoden oder Felder deklarieren, die alle Untertypen gemeinsam haben oder implementieren müssen.

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)
  }
}

Warum sealed?

Ein sealed Trait bietet Ihnen:

  • Eine bekannte, abgeschlossene Menge von Untertypen
  • Vollständigkeitsprüfung in match
  • Sichereres Refactoring beim Hinzufügen von Varianten

Mit sealed Traits und Case-Klassen erstellt Scala algebraische Datentypen.

Die Hierarchie verwenden

Funktionen können den Trait-Typ akzeptieren und mit jeder Variante arbeiten, wobei die Auswahl über Pattern Matching erfolgt.

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")))
  }
}

Alles zusammenführen

Ein sealed Trait mit gemischten Varianten, das über eine Funktion gemeinsam verwendet wird, die jeden Fall per Matching behandelt.

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)))
  }
}

Schnelltest

Testen Sie Ihr Verständnis von sealed Traits.

Zusammenfassung

Sie haben sealed Traits kennengelernt:

  • Ein trait definiert einen gemeinsamen Obertyp
  • sealed beschränkt Untertypen auf dieselbe Datei
  • Verwenden Sie case object für Varianten ohne Daten und case class für Varianten mit Daten
  • Sealing ermöglicht die Vollständigkeitsprüfung in match

Häufig gestellte Fragen

Ist die Lektion „Versiegelte Traits“ kostenlos?

Ja — der vollständige Text von „Versiegelte Traits“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Scala for Backend Engineering & Functional Programming-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Scala for Backend Engineering & Functional Programming-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Versiegelte Traits“?

Geschlossene Hierarchien Du übst Scala for Backend Engineering & Functional Programming mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Scala for Backend Engineering & Functional Programming zu starten?

Keine Vorkenntnisse erforderlich. Scala for Backend Engineering & Functional Programming auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Versiegelte Traits“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Scala for Backend Engineering & Functional Programming-Lektion Code schreiben und ausführen?

Ja. Jede Scala for Backend Engineering & Functional Programming-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Case Classes
  2. Versiegelte Traits
  3. Algebraische Datentypen
  4. Vollständiges Matching
← Zurück zu Scala for Backend Engineering & Functional Programming