Scala for Backend Engineering & Functional Programming · Lección

Métodos inline

inline de Scala 3

Lección 1 de 413 pasos

Métodos inline es una lección gratuita de Scala for Backend Engineering & Functional Programming en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Scala for Backend Engineering & Functional Programming, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Scala for Backend Engineering & Functional Programming incluye 4 lecciones en total.

¿Qué es inline?

La palabra clave inline de Scala 3 indica al compilador que expanda una definición en el lugar de la llamada durante la compilación. Es el punto de entrada a la metaprogramación, antes de las macros completas.

Un método inline

Marque un método con inline y su cuerpo se sustituirá allí donde se invoque. Esto puede eliminar el coste de la llamada y habilitar la especialización en tiempo de compilación.

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

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

Parámetros inline

Un parámetro inline obliga a insertar también su argumento. Si el argumento es una constante, el compilador puede convertirlo en un literal.

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

Plegado de constantes

Cuando los parámetros inline son literales, las ramas y la recursión pueden resolverse por completo en tiempo de compilación, dejando solo la expresión final en el bytecode.

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

Dentro de un método inline, inline if e inline match se resuelven en tiempo de compilación cuando el valor analizado se conoce estáticamente, lo que elimina las ramas muertas.

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

Inline transparente

transparent inline permite refinar el tipo de retorno del método en cada lugar de llamada; el compilador puede inferir un tipo más específico que el declarado.

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

compiletime.error

El paquete scala.compiletime ofrece herramientas como error para interrumpir la compilación con un mensaje personalizado, lo que resulta útil para validar argumentos inline.

import scala.compiletime.error

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

Valores inline

Un inline val es una verdadera constante de tiempo de compilación. Puede usarse donde se requieren literales, como en otros cálculos inline.

inline val MaxRetries = 3

inline def retries: Int = MaxRetries

Rendimiento frente a tamaño del código

La inserción de código intercambia tamaño del código por velocidad y garantías en tiempo de compilación. Usarla demasiado en cuerpos grandes aumenta el tamaño del bytecode, así que resérvela para métodos pequeños, muy utilizados o fundamentales para la especialización.

Ejecutable sin inline

A continuación se muestra la misma lógica de elevar al cuadrado como un programa autocontenido ordinario. La versión inline produciría resultados idénticos, con la multiplicación expandida en el lugar de la llamada.

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

Inline es la base

Las macros se basan en los métodos inline: un inline def puede llamar a una macro para generar código. Dominar primero inline facilita mucho el aprendizaje de la capa de macros.

Comprobación rápida

¿Qué cambia al añadir transparent a un método inline?

Resumen

Ha aprendido la inserción de código en Scala 3:

  • inline def se expande en el lugar de la llamada
  • parámetros inline y plegado de constantes
  • inline if / inline match
  • transparent inline, inline val, compiletime.error

Siguiente: fundamentos de las macros.

Gratis para empezar

Aprende Scala con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
39
Lecciones
143

Preguntas frecuentes

¿La lección «Métodos inline» es gratis?

Sí — el texto completo de «Métodos inline» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Scala for Backend Engineering & Functional Programming, actualiza a CoddyKit PRO. El curso de Scala for Backend Engineering & Functional Programming incluye 4 lecciones en total.

¿Qué aprenderé en «Métodos inline»?

inline de Scala 3 Practicas Scala for Backend Engineering & Functional Programming con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Scala for Backend Engineering & Functional Programming?

No se requiere experiencia previa. Scala for Backend Engineering & Functional Programming en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «Métodos inline»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Scala for Backend Engineering & Functional Programming?

Sí. Cada lección de Scala for Backend Engineering & Functional Programming incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Métodos inline
  2. Conceptos básicos de macros
  3. Quotes y splices
  4. Macros prácticas
← Volver a Scala for Backend Engineering & Functional Programming