Scala for Backend Engineering & Functional Programming · Lezione

Metodi inline

inline in Scala 3

Lezione 1 di 413 passaggi

Metodi inline è una lezione Scala for Backend Engineering & Functional Programming gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Scala for Backend Engineering & Functional Programming, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Scala for Backend Engineering & Functional Programming include 4 lezioni in totale.

Che cos'è inline?

La parola chiave inline in Scala 3 indica al compilatore di espandere una definizione nel punto di chiamata durante la compilazione. È il punto di accesso alla metaprogrammazione, prima delle macro complete.

Un metodo inline

Contrassegni un metodo con inline e il suo corpo viene sostituito in ogni punto in cui viene chiamato. Questo può eliminare il sovraccarico della chiamata e abilitare la specializzazione a tempo di compilazione.

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

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

Parametri inline

Un parametro inline obbliga a rendere inline anche il relativo argomento. Se l'argomento è una costante, il compilatore può sostituirlo con un valore letterale.

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

Valutazione anticipata delle costanti

Quando i parametri inline sono valori letterali, i rami e la ricorsione possono essere risolti completamente a tempo di compilazione, lasciando nel bytecode solo l'espressione finale.

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 e inline match

All'interno di un metodo inline, inline if e inline match vengono risolti a tempo di compilazione quando il valore esaminato è noto staticamente, eliminando i rami non raggiungibili.

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

Inline trasparente

transparent inline consente di raffinare il tipo restituito del metodo in base al punto di chiamata: il compilatore può inferire un tipo più specifico di quello dichiarato.

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

compiletime.error

Il pacchetto scala.compiletime offre strumenti come error per interrompere la compilazione con un messaggio personalizzato, utile per convalidare gli argomenti inline.

import scala.compiletime.error

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

Valori inline

Un inline val è una vera costante a tempo di compilazione. Può essere usato dove sono richiesti valori letterali, ad esempio in altri calcoli inline.

inline val MaxRetries = 3

inline def retries: Int = MaxRetries

Prestazioni e dimensioni del codice

L'inlining sacrifica la dimensione del codice a favore della velocità e delle garanzie a tempo di compilazione. Un uso eccessivo su corpi di grandi dimensioni gonfia il bytecode; lo riservi quindi a metodi piccoli, molto utilizzati o critici per la specializzazione.

Eseguibile senza inline

Ecco la stessa logica di elevamento al quadrato come programma ordinario autosufficiente. La versione inline produrrebbe risultati identici, espandendo la moltiplicazione nel punto di chiamata.

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

Inline è il fondamento

Le macro si basano sui metodi inline: un inline def può chiamare una macro per generare codice. Imparare prima inline rende molto più semplice il livello delle macro.

Verifica rapida

Che cosa cambia aggiungendo transparent a un metodo inline?

Riepilogo

Ha imparato l'inlining in Scala 3:

  • inline def si espande nel punto di chiamata
  • parametri inline e valutazione anticipata delle costanti
  • inline if / inline match
  • transparent inline, inline val, compiletime.error

Prossimo argomento: fondamenti delle macro.

Gratis per iniziare

Impara Scala con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
39
Lezioni
143

Domande Frequenti

La lezione «Metodi inline» è gratuita?

Sì — il testo completo di «Metodi inline» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Scala for Backend Engineering & Functional Programming, passa a CoddyKit PRO. Il corso Scala for Backend Engineering & Functional Programming include 4 lezioni in totale.

Cosa imparerò in «Metodi inline»?

inline in Scala 3 Eserciti Scala for Backend Engineering & Functional Programming con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Scala for Backend Engineering & Functional Programming?

Non è richiesta alcuna esperienza precedente. Scala for Backend Engineering & Functional Programming su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.

Quanto tempo richiede la lezione «Metodi inline»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Scala for Backend Engineering & Functional Programming?

Sì. Ogni lezione Scala for Backend Engineering & Functional Programming include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Metodi inline
  2. Basi delle macro
  3. Quote e splice
  4. Macro pratiche
← Torna a Scala for Backend Engineering & Functional Programming