I've actualmente algo de código Lua utilizando la siguiente sintaxis:
if (foo == nil or foo == '') then
foo = "some default value"
end
El objetivo de la condición if es probar que foo no es ni una cadena vacía, ni un valor nil.
¿Se puede simplificar este código en una prueba if en lugar de dos?
¿Puede simplificarse este código en una prueba if en lugar de dos?
nil
y ''
son valores diferentes. Si necesitas probar que s
no es ninguno de los dos, en mi opinión deberías simplemente comparar contra ambos, porque hace que tu intención sea más clara.
Eso y algunas alternativas, con su bytecode generado:
if not foo or foo == '' then end
GETGLOBAL 0 -1 ; foo
TEST 0 0 0
JMP 3 ; to 7
GETGLOBAL 0 -1 ; foo
EQ 0 0 -2 ; - ""
JMP 0 ; to 7
if foo == nil or foo == '' then end
GETGLOBAL 0 -1 ; foo
EQ 1 0 -2 ; - nil
JMP 3 ; to 7
GETGLOBAL 0 -1 ; foo
EQ 0 0 -3 ; - ""
JMP 0 ; to 7
if (foo or '') == '' then end
GETGLOBAL 0 -1 ; foo
TEST 0 0 1
JMP 1 ; to 5
LOADK 0 -2 ; ""
EQ 0 0 -2 ; - ""
JMP 0 ; to 7
El segundo es más rápido en Lua 5.1 y 5.2 (en mi máquina de todos modos), pero la diferencia es minúscula. I'd ir con la primera por el bien de la claridad's.