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 StringInferenz 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 requiredAbgeleiteter 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.sumInferenz 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 senseEin 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.