Scala 3 introdujo una nueva forma de manejar los parámetros implícitos, reemplazando las viejas palabras clave implicit val y implicit def por un sistema más legible: given y using.
def saludar(nombre: String)(using saludo: String): Unit =
println(s"$saludo, $nombre!")
given String = "Hola"
saludar("Emanuel") // Usa el valor dado automáticamente
given: define un valor que puede usarse de forma implícita.
using: marca el parámetro que puede ser resuelto automáticamente.
Ya no hay necesidad de usar la palabra implicit, lo que hace el código más claro y menos propenso a ambigüedades.
Veamos un ejemplo con varios contextos:
given idioma: String = "español"
given tono: String = "amistoso"
def saludar(nombre: String)(using idioma: String, tono: String): Unit =
println(s"Saludo en $idioma con tono $tono: ¡Hola, $nombre!")
saludar("Emanuel")
El compilador resuelve ambos using buscando given del tipo adecuado en el ámbito actual.
Scala 2: implicit → flexible, pero a veces confuso.
Scala 3: given/using → más explícito y seguro.
El concepto sigue siendo el mismo: inyectar contextos automáticamente, pero con una sintaxis que favorece la claridad y la mantenibilidad del código.
