0Pricing
Scala for Backend Engineering & Functional Programming · Lektion

Typinferenz

Lassen Sie den Compiler die Typen ableiten.

Typinferenz ist eine kostenlose Scala for Backend Engineering & Functional Programming-Lektion auf CoddyKit. Dies ist Lektion 3 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 Typinferenz?

Scala ist statisch typisiert, trotzdem müssen Sie Typen nur selten ausschreiben. Der Compiler leitet sie aus dem Wert auf der rechten Seite ab.

So erhalten Sie die Sicherheit statischer Typen mit der Kürze einer dynamischen Sprache.

val n = 42        // inferred Int
val label = "hi" // inferred String

Inferenz aus Literalen

Wenn Sie val x = 5 schreiben, erkennt der Compiler das Int-Literal und gibt x den Typ Int.

Ein Dezimalliteral wird zu einem Double, und Text in Anführungszeichen wird zu einem String.

object Main extends App {
  val count = 5
  val ratio = 1.5
  println(count + ratio)
}

Inferenz von Rückgabewerten bei Funktionen

Der Compiler kann auch den Rückgabetyp einer Methode aus ihrem Rumpf ableiten.

Hier gibt square ein Int zurück, weil der Rumpf zwei Int-Werte multipliziert. Sie mussten den Typ nicht angeben.

object Main extends App {
  def square(x: Int) = x * x
  println(square(6))
}

Parameter benötigen weiterhin Typen

Die Inferenz hat Grenzen. Methoden-parameter müssen annotiert werden, weil der Compiler keine Grundlage hat, aus der er sie ableiten könnte.

Das folgende Snippet würde ohne : Int bei x nicht kompilieren.

def increment(x: Int) = x + 1 // type on x is required

Abgeleiteter gemeinsamer Typ

Wenn Werte mehrere Typen haben könnten, leitet Scala den spezifischsten gemeinsamen Typ ab.

Werden ein Int und ein Double in einer arithmetischen Berechnung gemischt, wird das Ergebnis zu Double erweitert.

object Main extends App {
  val mixed = 3 + 2.0  // Double
  println(mixed)
}

Inferenz in Collections

Collections leiten ihren Elementtyp aus den eingefügten Werten ab.

Eine Liste von Ganzzahlen wird automatisch zu List[Int]. So behalten Sie die vollständige Typsicherheit ohne Annotationen.

object Main extends App {
  val nums = List(1, 2, 3) // List[Int]
  println(nums.sum)
}

Wenn die Inferenz Sie überrascht

Manchmal wählt die Inferenz einen weiter gefassten Typ, als Sie möchten. Eine Liste gemischter Zahlen kann List[Double] oder sogar List[AnyVal] ergeben.

Wenn der abgeleitete Typ für Ihre Anforderungen nicht passt, fügen Sie eine explizite Annotation hinzu.

val a = List(1, 2.0)        // List[Double]
val b = List(1, "two")     // List[Any]

Mit Annotationen überschreiben

Sie können jederzeit explizit sein. Eine Typannotation dokumentiert Ihre Absicht und überschreibt eine zu eng gefasste Inferenz.

Hier wird das Literal 7 absichtlich zu einem Long erweitert.

val seconds: Long = 7
val data: List[Int] = List(1, 2, 3)

Öffentliche APIs: explizit sein

Eine verbreitete Stilregel lautet: Lassen Sie bei lokalen vals die Inferenz arbeiten, geben Sie bei öffentlichen Methoden jedoch explizite Rückgabetypen an.

So bleibt der Vertrag Ihrer Bibliothek stabil, auch wenn sich die Implementierung ändert.

def total(items: List[Int]): Int = items.sum

Inferenz bewahrt die Typsicherheit

Die Inferenz schwächt das Typsystem nicht. Der Compiler weist weiterhin ungültige Operationen zurück.

Unten wird name als String abgeleitet. Daher schlägt die Multiplikation mit einer Zahl beim Kompilieren fehl – genau wie vorgesehen.

val name = "Lia"
val bad = name * 3 // error: value * is not a member of String in this sense

Ein abgeleitetes val bleibt unveränderlich

Die Inferenz ergänzt nur den Typ. Sie ändert nicht, ob eine Bindung veränderlich ist.

Ein val n = 10 bleibt unveränderlich und als Int festgelegt; der Compiler erspart Ihnen lediglich die Eingabe von : Int.

object Main extends App {
  val n = 10 // inferred Int, still a val
  println(n * n)
}

Kurzer Check

An welcher Stelle verlangt Scala weiterhin, dass Sie einen Typ angeben?

Zusammenfassung

Die Typinferenz ermöglicht es Scala, prägnant zu bleiben, ohne die statische Typsicherheit aufzugeben.

  • Lokale vals und Rückgabetypen werden normalerweise abgeleitet.
  • Methodenparameter müssen annotiert werden.
  • Die Inferenz wählt den spezifischsten gemeinsamen Typ.
  • Verwenden Sie explizite Annotationen für öffentliche APIs oder um eine überraschende Inferenz zu überschreiben.

Häufig gestellte Fragen

Ist die Lektion „Typinferenz“ kostenlos?

Ja — der vollständige Text von „Typinferenz“ 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 „Typinferenz“?

Lassen Sie den Compiler die Typen ableiten. 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 3 von 4.

Wie lange dauert die Lektion „Typinferenz“?

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. val im Vergleich zu var
  2. Grundlegende Typen und Literale
  3. Typinferenz
  4. Ausdrücke statt Anweisungen
← Zurück zu Scala for Backend Engineering & Functional Programming