Skip to main content

Métodos de extensión en Scala

⏱ Dedicación recomendada: 0 minutos
Esto considera el contenido visible y relevante, e ignora texto colapsado o marcado como opcional.


r8vnhill/

En Scala 3, los métodos de extensión se introducen con una sintaxis específica y se pueden definir tanto para tipos concretos como para tipos genéricos. La flexibilidad y expresividad de Scala permite extender tipos de forma clara y potente.

Ejemplo de Método de Extensión en Scala 3

extension (str: String)
def isPalindrome: Boolean = str == str.reverse

// Uso
"radar".isPalindrome // true
"hello".isPalindrome // false

En este ejemplo, se extiende la clase String para añadir un método isPalindrome que verifica si una cadena es un palíndromo. La extensión se define utilizando la palabra clave extension y se aplica directamente a la instancia de String.

Diferencias y Similitudes con Kotlin

  1. Sintaxis:

    • Kotlin utiliza una sintaxis simple y directa para definir funciones de extensión, colocándolas fuera de la clase con la notación ClassName.methodName().
    • Scala 3, por otro lado, utiliza una palabra clave (extension) y una sintaxis que agrupa la extensión con su implementación. Esto puede ser más estructurado, pero también introduce un ligero overhead en comparación con la simplicidad de Kotlin.
  2. Capacidades de Extensión:

    • Tanto Scala como Kotlin permiten extender tipos concretos y genéricos. Sin embargo, en Scala 3, las extensiones pueden ser más expresivas al combinarse con las capacidades avanzadas de tipo de Scala, como tipos dependientes y metaprogramación.
    • En Kotlin, las funciones de extensión no pueden acceder a miembros privados o protegidos de la clase que se está extendiendo. Esto es similar en Scala, donde las extensiones solo pueden operar sobre lo que es visible públicamente.

Cosas que se Pueden Hacer en Scala 3 pero no en Kotlin

  • Extensiones Contextuales: En Scala 3, es posible crear extensiones que dependen de un contexto o de implicits (ahora llamados context parameters en Scala 3). Esto permite crear métodos de extensión que solo están disponibles cuando hay un contexto específico presente, algo que no se puede lograr en Kotlin.

    trait Show[T]:
    def show(t: T): String

    extension [T](t: T)(using showInstance: Show[T])
    def show: String = showInstance.show(t)

    En este ejemplo, show es una extensión que solo está disponible para un tipo T cuando existe una instancia Show[T] en el contexto. Esto no tiene un equivalente directo en Kotlin, ya que Kotlin no soporta implicits o parámetros de contexto.

  • Métodos de Extensión que Devuelven Tipos Dependientes: En Scala, los métodos de extensión pueden interactuar con tipos dependientes y otras características avanzadas del sistema de tipos de Scala, lo que permite una mayor flexibilidad en la forma de definir y utilizar extensiones.