El map (es sensacional)

Con el map podemos aplicar una función anónima lambda pasada como parámetro a cada uno de los elementos de una lista de entrada, y recopilarlos en otra lista que es devuelta como parámetro.

Este curso ha sido marcado como anticuado y no está siendo revisado de forma activa. Es posible que la información pueda estar desactualizada o que los enlaces se hayan roto.

Vamos a explorar la función map en Scala, una herramienta realmente poderosa para transformar colecciones de un tipo en otro de manera sencilla y elegante. Imaginemos que tenemos una lista de números, por ejemplo, 4, 8, 15, 16, 23, 42, y queremos obtener otra lista con el doble de cada uno de estos valores. En lenguajes como Java, normalmente haríamos un bucle for para recorrer cada elemento y añadir el resultado a una nueva lista. Sin embargo, en Scala podemos lograr esto de forma mucho más directa y expresiva usando map.

La función map recibe como parámetro una función que define cómo transformar cada elemento de la colección original. Esta función puede ser una función anónima, también conocida como función lambda, que no tiene nombre y se define directamente en el lugar donde se usa. En Scala, las funciones son objetos de primera clase, lo que significa que podemos pasarlas como argumentos, asignarlas a variables o devolverlas desde otras funciones.

Por ejemplo, si queremos doblar cada número de la lista, podemos escribir algo así:

val numeros = List(4, 8, 15, 16, 23, 42)
val dobles = numeros.map(x => x * 2)

Aquí, x => x * 2 es la función anónima que toma un número x y devuelve su doble. La función map aplica esta transformación a cada elemento de la lista numeros y devuelve una nueva lista con los resultados, en este caso List(8, 16, 30, 32, 46, 84).

Pero no solo podemos usar map para multiplicar números. Si quisiéramos obtener el cuadrado de cada número, bastaría con cambiar la función que pasamos a map:

val cuadrados = numeros.map(x => x * x)

Además, map no se limita a colecciones de números. Podemos usarlo con listas de cualquier tipo. Por ejemplo, si tenemos una lista de nombres de coches:

val coches = List("BMW", "Mercedes", "Seat", "Renault", "Toyota")

Podemos transformar cada nombre a mayúsculas usando map junto con el método toUpperCase:

val cochesMayusculas = coches.map(coche => coche.toUpperCase)

Scala también nos permite simplificar esta sintaxis usando un guion bajo _ como marcador para el parámetro de la función anónima, lo que hace que el código sea aún más conciso:

val cochesMayusculas = coches.map(_.toUpperCase)

Esto es equivalente a la versión anterior, pero más limpio y directo. Podemos aplicar cualquier función a cada elemento, por ejemplo, obtener la longitud de cada nombre de coche:

val longitudes = coches.map(_.length)

En este caso, partimos de una lista de cadenas y obtenemos una lista de enteros con la longitud de cada cadena.

Es importante no confundir la función map con la estructura de datos Map o HashMap. Aunque el nombre es similar, en este contexto map es un método para transformar colecciones, mientras que Map es una estructura que almacena pares clave-valor.

Además de map, existen otras funciones relacionadas como flatMap, que permiten realizar transformaciones más complejas, pero eso lo dejamos para otra ocasión.

Con map podemos convertir colecciones de forma muy flexible y expresiva, evitando bucles explícitos y haciendo que nuestro código sea más claro y funcional.

Lista de reproducción
  1. 1
    Introducción a Scala
    6 minutos
  2. 2
    Instalar Scala
    6 minutos
  3. 3
    Primeros pasos con el intérprete
    5 minutos
  4. 4
    Variables con val y var
    7 minutos
  5. 5
    Declarando funciones
    7 minutos
  6. 6
    Inciso sobre Units e iguales
    5 minutos
  7. 7
    Presentación de los objetos singleton
    6 minutos
  8. 8
    Editando y compilando archivos
    8 minutos
  9. 9
    Descargar e instalar Scala IDE
    6 minutos
  10. 10
    Proyectos y worksheets en Scala IDE
    7 minutos
  11. 11
    El condicional IF en Scala
    8 minutos
  12. 12
    Un caso sencillo de MATCH
    6 minutos
  13. 13
    Bucles WHILE y DO-WHILE (y String Interpolation)
    7 minutos
  14. 14
    El sistema de tipos
    7 minutos
  15. 15
    Colecciones
    9 minutos
  16. 16
    Funciones básicas de una colección
    8 minutos
  17. 17
    El map (es sensacional)
    8 minutos
  18. 18
    Flatten y flatMap
    9 minutos
  19. 19
    Sets, parte 1 de 3: Set
    8 minutos
  20. 20
    Sets, parte 2 de 3: Sets mutables
    4 minutos
  21. 21
    Sets, parte 3 de 3: SortedSet
    6 minutos
  22. 22
    Mapas (parte 1 de 2): Creando mapas
    9 minutos
  23. 23
    Mapas (parte 2 de 2): Operaciones
    8 minutos
  24. 24
    foreach y for
    8 minutos