Scala for backendutvikling og funksjonell programmering · leksjon

Inline-metoder

Scala 3 inline

Leksjon 1 av 413 trinn

Inline-metoder er en gratis leksjon i Scala for backendutvikling og funksjonell programmering på CoddyKit. Dette er leksjon 1 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Scala for backendutvikling og funksjonell programmering, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Scala for backendutvikling og funksjonell programmering inneholder totalt 4 leksjoner.

Hva er inline?

Nøkkelordet inline i Scala 3 forteller kompilatoren at en definisjon skal utvides på kallstedet under kompileringen. Det er inngangen til metaprogrammering, før fullverdige makroer.

En inline-metode

Merk en metode med inline, så settes metodens kropp inn overalt der den kalles. Dette kan fjerne kallkostnader og muliggjøre spesialisering under kompilering.

inline def square(x: Int): Int = x * x

val r = square(5) // compiles to 5 * 5

Inline-parametere

En inline-parameter tvinger også argumentet til å bli inline. Hvis argumentet er en konstant, kan kompilatoren folde det inn som en literal.

inline def power(x: Int, inline n: Int): Int =
  if (n == 0) 1 else x * power(x, n - 1)

Konstantfolding

Når inline-parametere er literaler, kan grener og rekursjon løses fullstendig under kompileringen, slik at bare det endelige uttrykket blir igjen i bytekoden.

inline def power(x: Int, inline n: Int): Int =
  if (n == 0) 1 else x * power(x, n - 1)

val c = power(2, 3) // expands to 2 * 2 * 2 * 1

inline if og inline match

Inne i en inline-metode løses inline if og inline match under kompileringen når uttrykket det testes mot, er statisk kjent. Da fjernes ubrukte grener.

inline def label(inline b: Boolean): String =
  inline if (b) "yes" else "no"

Transparent inline

transparent inline lar metodens returtype spesialiseres per kallsted — kompilatoren kan utlede en mer spesifikk type enn den deklarerte.

transparent inline def first(inline b: Boolean): Any =
  inline if (b) 1 else "x" // type can be Int or String

compiletime.error

Pakken scala.compiletime tilbyr verktøy som error for å avbryte kompileringen med en egendefinert melding — nyttig for validering av inline-argumenter.

import scala.compiletime.error

inline def positive(inline n: Int): Int =
  inline if (n <= 0) error("n must be positive") else n

Inline-verdier

En inline val er en ekte konstant kjent under kompileringen. Den kan brukes der det kreves literaler, for eksempel i andre inline-beregninger.

inline val MaxRetries = 3

inline def retries: Int = MaxRetries

Ytelse kontra kodestørrelse

Inlining bytter kodestørrelse mot hastighet og garantier ved kompilering. Overdreven bruk på store metodekropper blåser opp bytekoden, så reserver det for små, hyppig brukte eller spesialiseringskritiske metoder.

Kjørbar uten inline

Her er den samme kvadreringslogikken som et vanlig, selvstendig program. Inline-versjonen ville produsert identiske resultater, med multiplikasjonen utvidet på kallstedet.

object Main {
  def square(x: Int): Int = x * x
  def main(args: Array[String]): Unit = {
    println(square(5)) // 25
  }
}

Inline er grunnlaget

Makroer bygger på inline-metoder: en inline def kan kalle en makro for å generere kode. Når du først behersker inline, blir makrolaget mye enklere.

Rask kontroll

Hva endres når du legger til transparent i en inline-metode?

Oppsummering

Du har lært om inlining i Scala 3:

  • inline def utvides på kallstedet
  • inline-parametere og konstantfolding
  • inline if / inline match
  • transparent inline, inline val, compiletime.error

Neste: grunnleggende makroer.

Gratis å komme i gang

Lær deg Scala med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
39
Leksjoner
143

Ofte stilte spørsmål

Er leksjonen «Inline-metoder» gratis?

Ja – hele teksten i «Inline-metoder» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Scala for backendutvikling og funksjonell programmering-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Scala for backendutvikling og funksjonell programmering inneholder totalt 4 leksjoner.

Hva lærer jeg i «Inline-metoder»?

Scala 3 inline Du øver på Scala for backendutvikling og funksjonell programmering med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Scala for backendutvikling og funksjonell programmering?

Ingen tidligere erfaring er nødvendig. Scala for backendutvikling og funksjonell programmering på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.

Hvor lang tid tar leksjonen «Inline-metoder»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Scala for backendutvikling og funksjonell programmering-leksjonen?

Ja. Alle Scala for backendutvikling og funksjonell programmering-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Inline-metoder
  2. Grunnleggende makroer
  3. Quotes og splices
  4. Praktiske makroer
← Tilbake til Scala for backendutvikling og funksjonell programmering