Tuplas

Las tuplas son estructuras de datos que permitirán agrupar múltiples expresiones en una única expresión compuesta. Con la función elem, podemos extraer el elemento que se encuentre en una posición concreta de las tuplas.

Cuando trabajamos con Elixir, es fundamental entender cómo manejar tipos compuestos que nos permitan agrupar múltiples valores en una sola estructura. Uno de los tipos compuestos más útiles que encontramos en Elixir son las tuplas. Estas estructuras nos permiten encapsular varias expresiones o variables en una única expresión inmutable, lo que facilita la organización y manipulación de datos relacionados.

Las tuplas se escriben entre llaves {} y dentro de ellas podemos incluir múltiples valores separados por comas. Lo interesante es que estos valores pueden ser de distintos tipos, por ejemplo, podemos tener un átomo, un número entero, una cadena de texto y un número flotante todos juntos en la misma tupla. Esto nos da mucha flexibilidad para representar datos complejos, como coordenadas en un espacio tridimensional o cualquier conjunto de valores relacionados.

Un uso muy común de las tuplas en Elixir es para devolver múltiples valores desde una función. En lugar de limitarse a devolver un solo valor, podemos devolver una tupla que contenga varios resultados. Por ejemplo, si queremos crear una función que calcule el cociente y el resto de una división entera, podemos devolver ambos valores agrupados en una tupla. Para hacer esto, podemos usar la función div para obtener el cociente y rem para obtener el resto, y luego devolverlos juntos.

Podemos definir esta función anónima de la siguiente manera:

div_y_resto = fn a, b -> {div(a, b), rem(a, b)} end

Si la llamamos con los valores 8 y 3, nos devolverá la tupla {2, 2}, donde 2 es el cociente y 2 es el resto.

Es importante destacar que en Elixir las tuplas son inmutables. Esto significa que no podemos modificar una tupla una vez creada, sino que cualquier operación que parezca modificarla en realidad devuelve una nueva tupla con los cambios aplicados. Por ejemplo, si queremos añadir un elemento a una tupla, podemos usar la función Tuple.append/2, que recibe la tupla original y el nuevo elemento, y devuelve una nueva tupla con ese elemento añadido al final.

tupla_original = {4, 0}
tupla_nueva = Tuple.append(tupla_original, 2)
# tupla_nueva es {4, 0, 2}

Pero la tupla original tupla_original sigue siendo {4, 0} porque no se modifica.

Para acceder a los elementos de una tupla, podemos usar la función elem/2, que recibe la tupla y el índice del elemento que queremos obtener. Los índices comienzan en 0, por lo que el primer elemento está en la posición 0, el segundo en la 1, y así sucesivamente.

Por ejemplo:

tupla = {4, 2, "hola", :adios}
elem(tupla, 0)  # devuelve 4
elem(tupla, 1)  # devuelve 2
elem(tupla, 2)  # devuelve "hola"
elem(tupla, 3)  # devuelve :adios

Si intentamos acceder a un índice que no existe, Elixir nos dará un error.

Este enfoque de usar tuplas para agrupar valores y devolver múltiples resultados es muy útil, especialmente cuando combinamos estas estructuras con funciones, ya que nos permite manejar datos complejos de forma clara y eficiente. Además, la inmutabilidad de las tuplas es una característica clave que facilita la programación concurrente y distribuida en Elixir, ya que garantiza que los datos no cambien inesperadamente cuando se comparten entre procesos.

Lista de reproducción
  1. 1
    ¿Qué es Elixir?
    10 minutos
  2. 2
    Instalación de Elixir
    9 minutos
  3. 3
    ¿Qué es la programación funcional? (Como la de Elixir)
    20 minutos
  4. 4
    ¿Cómo funciona la REPL de Elixir?
    7 minutos
  5. 5
    ¿Cómo hacer asignaciones en Elixir?
    7 minutos
  6. 6
    Operadores aritméticos básicos
    6 minutos
  7. 7
    ¿Qué son los tipos de datos de Elixir?
    5 minutos
  8. 8
    Átomos en Elixir
    4 minutos
  9. 9
    Las palabras clave nil, true y false
    6 minutos
  10. 10
    Operadores lógicos de comparación
    8 minutos
  11. 11
    Comparación estricta con ===
    3 minutos
  12. 12
    Operadores lógicos y proposicionales
    8 minutos
  13. 13
    Invocación de funciones
    10 minutos
  14. 14
    Fundamentos de funciones
    9 minutos
  15. 15
    Cadenas de caracteres
    8 minutos
  16. 16
    Entrada y salida estandar de la mano de gets y puts
    9 minutos
  17. 17
    Concatenar e interpolar strings
    9 minutos
  18. 18
    Código fuente en archivos
    9 minutos
  19. 19
    Condicional IF y bloques DO-END
    11 minutos
  20. 20
    IFs anidados, UNLESS y COND
    12 minutos
  21. 21
    Definición de funciones
    11 minutos
  22. 22
    Fundamentos de compilación de módulos
    6 minutos
  23. 23
    Guardas
    8 minutos
  24. 24
    Funciones anónimas
    7 minutos
  25. 25
    Capturar funciones
    4 minutos
  26. 26
    Invocación de funciones dentro del mismo módulo
    7 minutos
  27. 27
    Tuplas
    8 minutos
  28. 28
    Introducción al pattern matching
    8 minutos
  29. 29
    Pattern matching en funciones
    11 minutos
  30. 30
    Las tuplas :ok, :error
    7 minutos
  31. 31
    case
    10 minutos
  32. 32
    Operador pin
    7 minutos
  33. 33
    Pattern matchings y recursividad
    5 minutos
  34. 34
    Listas
    9 minutos
  35. 35
    Operadores y funciones de lista
    10 minutos
  36. 36
    Keyword lists: listas de palabras clave
    8 minutos
  37. 37
    Mapas
    7 minutos
  38. 38
    Pattern matching de mapas y keyword lists
    6 minutos
  39. 39
    Operadores y funciones para mapas y keyword lists
    5 minutos
  40. 40
    Estructuras con defstruct
    11 minutos
  41. 41
    Bitstrings
    11 minutos
  42. 42
    Charlists
    10 minutos
  43. 43
    Funciones de alto orden en Elixir
    5 minutos
  44. 44
    Uso de la función filter
    10 minutos
  45. 45
    Uso de la función map
    7 minutos
  46. 46
    Uso de la función reduce
    9 minutos
  47. 47
    Pipelines
    11 minutos
  48. 48
    Rangos y Streams
    11 minutos
  49. 49
    Funciones recursivas con listas
    14 minutos