Operadores lógicos y proposicionales

Los operadores lógicos proposicionales evalúan a true o false según cómo de true o de false sean los inputs. NOT niega la veracidad de su input, AND sólo es true cuando ambas entradas sean true, OR es true salvo que ninguna entrada sea true.

En Elixir contamos con tres operadores lógicos fundamentales que implementan la lógica proposicional binaria: Not, And y Or. Estos operadores trabajan evaluando expresiones a True o False según el valor de verdad de sus operandos. Aunque en realidad existen seis operadores, se dividen en dos variantes: una estricta y otra relajada. Para entender bien su funcionamiento, es útil comenzar por la variante estricta.

El operador Not es un operador unario que niega el valor booleano de la expresión que tiene a su derecha. Por ejemplo, Not False evalúa a True y Not True evalúa a False. No importa si el valor es una constante o una variable, lo que importa es el resultado booleano de la expresión que se evalúa a la derecha.

El operador And es binario y devuelve True únicamente cuando ambos operandos, el de la izquierda y el de la derecha, son True. Si alguno de los dos es False, el resultado será False. Por ejemplo, True and True es True, pero True and False o False and True son False.

Por otro lado, el operador Or devuelve True si al menos uno de sus operandos es True. Solo devuelve False cuando ambos son False. Así, True or False y False or True son True, mientras que False or False es False.

Estos operadores pueden combinarse para formar expresiones más complejas. La evaluación sigue un orden de precedencia: primero se evalúan los Not, luego los And y finalmente los Or. Por ejemplo, en la expresión Not False and True, primero se evalúa Not False que es True, y luego True and True que también es True. En cambio, True and Not True es False porque Not True es False y True and False es False. También podemos combinar varios operadores del mismo tipo, evaluándose de izquierda a derecha.

Sin embargo, esta variante estricta tiene limitaciones cuando los operandos no son valores booleanos. Por ejemplo, Not 5 o 5 and 3 generan errores porque estos operadores esperan expresiones que se evalúen a True o False.

Para manejar estos casos, Elixir ofrece una variante relajada de los operadores lógicos: el operador ! para Not, && para And y || para Or. Estos operadores aceptan valores que no son estrictamente booleanos y aplican una lógica diferente: consideran que cualquier valor que no sea false ni nil es true. Por ejemplo, !nil es true y !5 es false porque 5 se interpreta como true y su negación es false.

En esta variante relajada, el operador && devuelve el primer valor que sea falso o nil si lo encuentra a la izquierda, evitando evaluar el operando derecho (cortocircuito). Si el valor de la izquierda es verdadero (es decir, distinto de false o nil), entonces devuelve el valor de la derecha. Por ejemplo, 5 && true devuelve true, mientras que nil && true devuelve nil.

El operador || funciona de manera similar pero con la lógica inversa: devuelve el primer valor verdadero que encuentre, o el último valor si todos son falsos o nil. Esto es útil para establecer valores por defecto. Por ejemplo, si tenemos una variable que puede ser nil, podemos usar variable || "valor por defecto" para asegurarnos de que siempre haya un valor válido.

Esta característica es especialmente práctica para evitar errores cuando trabajamos con valores que pueden ser nil. Por ejemplo, si queremos enviar algo a una dirección que podría no estar definida, podemos usar direccion || "sin dirección" para garantizar que siempre haya un valor válido.

Con estas seis variantes de operadores lógicos, podemos construir expresiones booleanas robustas que manejan tanto valores estrictamente booleanos como valores más generales, facilitando la escritura de código seguro y expresivo 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