Skip to main content

Colecciones Mutables en Scala

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


En Scala, al igual que en Kotlin, las colecciones mutables permiten la modificación de su contenido durante la ejecución del programa. Scala también ofrece versiones mutables de listas, sets, y mapas, aunque su enfoque hacia la inmutabilidad por defecto lo diferencia de Kotlin.

Scala proporciona dos versiones de casi todas sus colecciones: mutables y inmutables. Las colecciones mutables se encuentran en el paquete scala.collection.mutable, mientras que las inmutables están en scala.collection.immutable.

Ejemplos de Colecciones Mutables en Scala

mutable.ListBuffer

En Scala, la clase ListBuffer es una lista mutable que permite la inserción y eliminación de elementos, similar a MutableList en Kotlin.

import scala.collection.mutable.ListBuffer

val mutableList = ListBuffer("Kotlin", "Scala")
mutableList += "Java"
mutableList(1) = "Groovy"
println(mutableList) // ListBuffer(Kotlin, Groovy, Java)

mutable.Set

El mutable.Set en Scala, similar a MutableSet en Kotlin, permite modificar el contenido del conjunto, agregando o eliminando elementos. No permite duplicados.

import scala.collection.mutable.Set

val mutableSet = Set("Kotlin", "Java")
mutableSet += "Scala"
mutableSet -= "Java"
println(mutableSet) // Set(Kotlin, Scala)

mutable.Map

El mutable.Map en Scala funciona como MutableMap en Kotlin, permitiendo agregar, modificar y eliminar pares clave-valor.

import scala.collection.mutable.Map

val mutableMap = Map("Kotlin" -> 1, "Java" -> 2)
mutableMap += ("Scala" -> 3)
mutableMap -= "Java"
println(mutableMap) // Map(Kotlin -> 1, Scala -> 3)

Conversión entre Colecciones Mutables e Inmutables

Una diferencia notable en Scala es la necesidad de convertir explícitamente entre colecciones mutables e inmutables. Por ejemplo, puedes convertir una lista mutable a inmutable usando toList:

val mutableList = ListBuffer(1, 2, 3)
val immutableList = mutableList.toList

Este enfoque promueve la seguridad y el control sobre cuándo las colecciones pueden ser modificadas.

Comparación Final

CaracterísticaKotlinScala
Mutabilidad por defectoColecciones inmutables por defecto, pero ofrece versiones mutables con mutableListOf, mutableSetOf, etc.Las colecciones inmutables son la opción por defecto. Las mutables requieren una importación explícita desde scala.collection.mutable.
Manipulación de elementosMétodos de manipulación como add, remove, y set disponibles en colecciones mutables.Funcionalidades similares mediante +=, -=, y apply.
Conversión entre mutables e inmutablesConversiones fluidas, pero Kotlin promueve el uso de inmutabilidad donde sea posible.La conversión explícita es requerida usando métodos como toList, lo que promueve el control de mutabilidad.
Acceso por índiceSoporte nativo en listas mutables.También permite acceso directo mediante apply en ListBuffer.
InteroperabilidadKotlin permite una interoperabilidad fácil entre colecciones mutables e inmutables.Scala separa claramente las colecciones mutables de las inmutables con diferentes paquetes.
Ventajas de Scala
  1. Control explícito sobre la mutabilidad: En Scala, al requerir importaciones explícitas para las colecciones mutables, se fomenta la inmutabilidad por defecto, lo que refuerza un diseño más seguro y predecible.
  2. Conversión controlada: Al convertir entre colecciones mutables e inmutables de manera explícita, Scala permite un control más preciso sobre cuándo y cómo se realizan cambios en las colecciones.
  3. Expresividad: Scala ofrece una sintaxis concisa y poderosa para manipular colecciones, haciendo que las operaciones sean fáciles de leer y escribir, especialmente con el uso de operadores como += y -=.
Desventajas de Scala
  1. Mayor verbosidad en la importación: Comparado con Kotlin, donde las colecciones mutables están disponibles sin importaciones adicionales, Scala requiere importar explícitamente las colecciones mutables, lo que puede aumentar la verbosidad.
  2. Curva de aprendizaje: La necesidad de diferenciar entre colecciones mutables e inmutables puede ser confusa para desarrolladorxs nuevxs en Scala, quienes podrían tener que aprender cuándo usar cada una.
  3. Eficiencia: En ciertos casos, el manejo de la conversión explícita entre mutabilidad e inmutabilidad puede agregar una carga adicional de rendimiento y complejidad al código, especialmente en aplicaciones de gran escala.

Bibliografías Recomendadas

  • 📚 "6. Scala Collections". (2022). David Pollak, Vishal Layka, & Andres Sacco, en Beginning Scala 3: A Functional and Object-Oriented Java Language, (pp. 135–171.) Apress Media, LLC.