Firebird Documentation Index → Guía de NULL en Firebird → NULL en sentencias if |
Si la condición de una sentencia if
devuelve un
NULL
, la cláusula then
se salta y
(si existe) se ejecuta la cláusula else
. Pero ¡cuidado!
La condición debe comportarse como
false
en este caso, pero no tiene el
valor false
. Es todavía
NULL
, y pueden suceder cosas extrañas si lo olvidas.
Los siguientes ejemplos exploran algunas de las obras diabólicas de
NULL
en las sentencias if
.
if (a = b) then MiVariable = 'Igual'; else MiVariable = 'No igual';
Si a
y b
son ambas
NULL
, MiVariable será “No igual” al
ejecutar este código. La razón es que la expresión “a =
b
” devuelve NULL
si - al menos -
uno de ellos es NULL
. Con esta condición
NULL
, el bloque then
es
ignorado y el else
es ejecutado.
if (a <> b) then MiVariable = 'No igual'; else MiVariable = 'Igual';
Aquí, MiVariable
será
“Igual
” si a
es
NULL
y b
no o viceversa. La
explicación es análoga al ejemplo anterior.
if (not (a <> b)) then MiVariable = 'Igual'; else MiVariable = 'No igual';
Esta otra parece que devuelve el mismo resultado que la
anterior, ¿Es así? Después de todo, hemos invertido la condición e
intercambiado las cláusulas then
y
else
. Y, de hecho, siempre que ninguna variable es
NULL
, ambos códigos son equivalentes. Pero
siempre que a
o b
son
NULL
, lo es la expresión entera y se ejecuta la
cláusula else
y el resultado es “No
igual
”.
Por supuesto, somos conscientes de que este tercer ejemplo es
totalmente equivalente al primero. Simplemente lo hemos incluido
para hacer hincapié en que
not(
es
NULL
)NULL
. Por tanto, en condiciones que resulten en
NULL
, not()
no las
invierte.
Firebird Documentation Index → Guía de NULL en Firebird → NULL en sentencias if |