Typeinferens
Lad compileren udlede typerne.
Typeinferens er en gratis Scala til backendudvikling og funktionel programmering-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Scala til backendudvikling og funktionel programmering, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Scala til backendudvikling og funktionel programmering-kurset indeholder 4 lektioner i alt.
Hvad er typeinferens?
Scala er statisk typet, men du behøver sjældent at skrive typerne eksplicit. Compileren udleder dem fra værdien på højre side.
Det giver dig typesikkerhed kombineret med en dynamisk scriptsprogs kortfattethed.
val n = 42 // inferred Int
val label = "hi" // inferred StringInferens fra literaler
Når du skriver val x = 5, ser compileren Int-literalen og giver x typen Int.
En decimalliteral bliver til en Double, og tekst i anførselstegn bliver til en String.
object Main extends App {
val count = 5
val ratio = 1.5
println(count + ratio)
}Inferens for funktioners returværdier
Compileren kan også udlede en metodes returtype fra dens krop.
Her returnerer square en Int, fordi kroppen multiplicerer to Int-værdier. Du behøvede ikke at angive det.
object Main extends App {
def square(x: Int) = x * x
println(square(6))
}Parametre skal stadig have typer
Inferens har begrænsninger. Metodens parametre skal annoteres, fordi compileren ikke har noget at udlede dem fra.
Kodestykket nedenfor ville ikke kunne kompileres uden : Int på x.
def increment(x: Int) = x + 1 // type on x is requiredUdledt fælles type
Når værdier kan have flere typer, udleder Scala den mest specifikke fælles type.
Hvis du blander en Int og en Double i en aritmetisk beregning, udvides resultatet til Double.
object Main extends App {
val mixed = 3 + 2.0 // Double
println(mixed)
}Inferens i samlinger
Samlinger udleder elementtypen fra de værdier, du indsætter i dem.
En liste med heltal bliver automatisk til List[Int], så du bevarer fuld typesikkerhed uden annoteringer.
object Main extends App {
val nums = List(1, 2, 3) // List[Int]
println(nums.sum)
}Når inferens overrasker dig
Nogle gange vælger inferensen en bredere type, end du ønsker. En liste med blandede tal kan få typen List[Double] eller endda List[AnyVal].
Hvis den udledte type ikke passer til dine behov, kan du tilføje en eksplicit annotering.
val a = List(1, 2.0) // List[Double]
val b = List(1, "two") // List[Any]Tilsidesættelse med annoteringer
Du kan altid være eksplicit. En typeannotering dokumenterer både din hensigt og tilsidesætter en inferens, der er for snæver.
Her udvides literalen 7 med vilje til en Long.
val seconds: Long = 7
val data: List[Int] = List(1, 2, 3)Offentlige API'er: Vær eksplicit
En almindelig stilregel er at lade inferensen håndtere lokale val-bindinger, men skrive eksplicitte returtyper på offentlige metoder.
Det holder dit biblioteks kontrakt stabil, selv hvis implementeringen ændres.
def total(items: List[Int]): Int = items.sumInferens bevarer typesikkerheden
Inferens svækker ikke typesystemet. Compileren afviser stadig ugyldige operationer.
Nedenfor udledes name som String, så det mislykkes at multiplicere den med et tal, præcis som det skal.
val name = "Lia"
val bad = name * 3 // error: value * is not a member of String in this senseEn udledt val er stadig uforanderlig
Inferens udfylder kun typen. Den ændrer ikke, om en binding er foranderlig.
En val n = 10 er stadig uforanderlig og fast som en Int; compileren sparede dig blot for at skrive : Int.
object Main extends App {
val n = 10 // inferred Int, still a val
println(n * n)
}Hurtigt tjek
Hvornår kræver Scala stadig, at du skriver en type?
Opsummering
Typeinferens gør det muligt for Scala at være kortfattet uden at miste statisk sikkerhed.
- Lokale
val-værdier og returtyper udledes som regel automatisk. - Parametre til metoder skal annoteres.
- Inferensen vælger den mest specifikke fælles type.
- Annotér eksplicit for offentlige API'er eller for at tilsidesætte overraskende inferens.
Lær Scala med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 39
- Lektioner
- 143
Ofte stillede spørgsmål
Er lektionen “Typeinferens” gratis?
Ja — hele teksten til “Typeinferens” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Scala til backendudvikling og funktionel programmering-kurset, skal du opgradere til CoddyKit PRO. Scala til backendudvikling og funktionel programmering-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Typeinferens”?
Lad compileren udlede typerne. Du øver dig i Scala til backendudvikling og funktionel programmering med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Scala til backendudvikling og funktionel programmering?
Der kræves ingen tidligere erfaring. Scala til backendudvikling og funktionel programmering på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.
Hvor lang tid tager lektionen “Typeinferens”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Scala til backendudvikling og funktionel programmering-lektion?
Ja. Alle Scala til backendudvikling og funktionel programmering-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.