Operador pin

El operador pin sirve para fijar los elementos que hay a la izquierda de un igual en Elixir, de modo que deje de verlos como incógnitas a despejar durante un matcheo y lo vea como variables ya declaradas cuyo valor tiene que forma parte del casamiento en el despeje.

En Elixir, el pattern matching es una herramienta fundamental que nos permite enlazar variables con valores de manera muy flexible. Sin embargo, esta flexibilidad puede llevar a situaciones donde una variable se reasigna sin que nos demos cuenta, algo que puede complicar el control del flujo de nuestro código. Para manejar esto, Elixir nos ofrece un operador especial llamado PIN, que modifica el comportamiento del pattern matching para evitar la reasignación de variables.

Normalmente, cuando escribimos una expresión como x = 5, estamos haciendo un pattern matching donde x se enlaza con el valor 5. Si luego escribimos x = 4, Elixir no se queja y simplemente vuelve a enlazar x con 4. Esto se conoce como rebinding o reasignación, y es algo que puede ocurrir tanto en la consola interactiva como dentro del código fuente. Aunque puede parecer que no podemos cambiar el valor de una variable, en realidad Elixir nos permite hacerlo mediante este rebinding.

El operador PIN nos ayuda a controlar este comportamiento. Cuando usamos el PIN delante de una variable, por ejemplo ^x, le estamos diciendo a Elixir que no trate a x como una incógnita para enlazar, sino como un valor ya existente que debe coincidir exactamente. Esto significa que si x ya tiene un valor asignado, el pattern matching solo tendrá éxito si el valor que estamos intentando casar es igual a ese valor.

Veamos cómo funciona en la práctica. Si tenemos:

x = 4
^x = 4

El segundo patrón con el PIN funciona porque estamos diciendo que el valor a la izquierda debe coincidir con el valor actual de x, que es 4. Pero si intentamos:

^x = 5

Esto fallará porque x es 4 y no puede coincidir con 5. De esta forma, el operador PIN nos permite hacer patrones más estrictos y evitar que variables ya enlazadas se reasignen accidentalmente.

Este comportamiento también se extiende a estructuras más complejas, como tuplas. Por ejemplo, si tenemos:

x = 5
{:ok, y} = {:ok, 0}

Aquí, x es 5, y y se enlaza con 0. Pero si intentamos hacer un pattern matching con PIN en la tupla:

{:ok, ^x} = {:ok, 4}

Esto fallará porque el valor en la tupla es 4, que no coincide con el valor de x que es 5. Así, el operador PIN nos permite controlar con precisión qué valores deben coincidir en nuestros patrones, evitando que variables se reasignen sin querer.

En resumen, el operador PIN es una herramienta poderosa para hacer que nuestros patrones sean más estrictos y controlados, evitando la reasignación implícita de variables en Elixir. Nos permite tratar variables ya enlazadas como constantes dentro del pattern matching, lo que puede ayudarnos a escribir código más claro y menos propenso a errores relacionados con el rebinding. Es importante tenerlo presente en nuestro arsenal cuando trabajamos con patrones en Elixir.

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