Scala til backendudvikling og funktionel programmering · Lektion

Inline-metoder

Scala 3 inline

Lektion 1 af 413 trin

Inline-metoder er en gratis Scala til backendudvikling og funktionel programmering-lektion på CoddyKit. Dette er lektion 1 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 inline?

Nøgleordet inline i Scala 3 fortæller compileren, at en definition skal udvides på kaldestedet under kompileringen. Det er indgangen til metaprogrammering før fulde makroer.

En inline-metode

Markér en metode med inline, så dens krop indsættes, hvor den kaldes. Det kan fjerne overhead ved metodekald og muliggøre specialisering under kompileringen.

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

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

Inline-parametre

En inline-parameter tvinger også argumentet til at blive inline-udvidet. Hvis argumentet er en konstant, kan compileren folde det ind i en literal.

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

Konstantfoldning

Når inline-parametre er literaler, kan forgreninger og rekursion løses fuldstændigt under kompileringen, så kun det endelige udtryk bliver tilbage 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

Inde i en inline-metode løses inline if og inline match under kompileringen, når det undersøgte udtryk er statisk kendt, så døde forgreninger fjernes.

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

Transparent inline

transparent inline lader metodens returtype blive specificeret yderligere pr. kaldested — compileren kan udlede en mere specifik type end den deklarerede.

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 indeholder værktøjer som error, der kan få kompileringen til at mislykkes med en tilpasset meddelelse — nyttigt til validering af 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-værdier

En inline val er en ægte konstant, der kendes under kompileringen. Den kan bruges steder, hvor der kræves literaler, f.eks. i andre inline-beregninger.

inline val MaxRetries = 3

inline def retries: Int = MaxRetries

Ydeevne kontra kodestørrelse

Inline-udvidelse bytter kodestørrelse for hastighed og garantier under kompileringen. Hvis du overbruger det på store metodekroppe, bliver bytekoden større, så gem det til små, ofte kørte eller specialiseringskritiske metoder.

Kørsel uden inline

Her er den samme kvadreringslogik som et almindeligt selvstændigt program. Inline-versionen ville give identiske resultater med multiplikationen udvidet på kaldestedet.

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

Inline er grundlaget

Makroer bygger på inline-metoder: en inline def kan kalde en makro for at generere kode. Når du først behersker inline, bliver makrolaget meget lettere.

Hurtigt tjek

Hvad ændrer det, når du tilføjer transparent til en inline-metode?

Opsummering

Du har lært om inline-udvidelse i Scala 3:

  • inline def udvides på kaldestedet
  • inline-parametre og konstantfoldning
  • inline if / inline match
  • transparent inline, inline val, compiletime.error

Næste emne: grundlæggende makroer.

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 “Inline-metoder” gratis?

Ja — hele teksten til “Inline-metoder” 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 “Inline-metoder”?

Scala 3 inline 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 1 af 4.

Hvor lang tid tager lektionen “Inline-metoder”?

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. Inline-metoder
  2. Grundlæggende makroer
  3. Quotes og splices
  4. Praktiske makroer
← Tilbage til Scala til backendudvikling og funktionel programmering