Los guards de Elixir permiten componer comprobaciones con los operadores booleanos and y or, pero su comportamiento difiere del esperado cuando se invierte el orden de las cláusulas. La entrada analiza un módulo de ejemplo con dos funciones, Foo.a/1 y Foo.b/1, cuyas guardas son idénticas salvo por el orden de las condiciones is_integer(x) or is_map_key(x, :foo) frente a is_map_key(x, :foo) or is_integer(x). En la primera función, ambos casos —un mapa con la clave :foo y el entero 37— devuelven true sin sorpresa, gracias a la evaluación cortocircuitada de or. En la segunda, el caso del entero 37 produce un error: is_map_key/2 sobre un entero no devuelve false, sino que falla, y un fallo dentro de una expresión de guarda aborta toda la guarda en lugar de propagarse como false. El resultado es que la cláusula is_integer(x) jamás llega a evaluarse, lo que rompe la aparente conmutatividad del operador. El artículo recuerda que and y or nunca fueron conmutativos en Elixir, ya que la evaluación en cortocircuito evalúa primero el operando izquierdo; cambiar el orden, además, activa rutas de fallo distintas. Como dato práctico, el texto señala que Elixir 1.20.1 con OTP 29 no emite ninguna advertencia sobre este patrón, por lo que conviene revisar manualmente las guardas que combinen predicados seguros con predicados que puedan elevar excepciones.
