string - reconocer - como saber si es plata con limon
Comprueba si una cadena no es nula o está vacía en Lua (2)
Actualmente tengo algunos códigos Lua con la siguiente sintaxis:
if (foo == nil or foo == '''') then
foo = "some default value"
end
El objetivo de la condición if es probar foo no es una cadena vacía, ni un valor nulo.
¿Se puede simplificar este código en una prueba si no en dos?
¿Se puede simplificar este código en una prueba si no en dos?
nil
y ''''
son valores diferentes. Si necesita probar que s
no es ninguno de los dos, IMO debe comparar con ambos, porque hace que su intento sea más claro.
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 el más rápido en Lua 5.1 y 5.2 (en mi máquina de todos modos), pero la diferencia es pequeña. Yo iría con el primero por claridad.
Una cosa simple que podrías hacer es abstraer la prueba dentro de una función.
local function isempty(s)
return s == nil or s == ''''
end
if isempty(foo) then
foo = "default value"
end