Scala til backendudvikling og funktionel programmering · Lektion

Typeinferens

Lad compileren udlede typerne.

Lektion 3 af 413 trin

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 String

Inferens 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 required

Udledt 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.sum

Inferens 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 sense

En 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.
Gratis at komme i gang

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.

Alle lektioner i dette kursus

  1. val kontra var
  2. Grundlæggende typer og literaler
  3. Typeinferens
  4. Udtryk frem for statements
← Tilbage til Scala til backendudvikling og funktionel programmering