現在、以下の構文でLuaのコードを書いています:
if (foo == nil or foo == '') then
foo = "some default value"
end
if条件の目的は、fooが空文字列でもなく、nil値でもないことをテストすることです。
このコードは、2つのifテストの代わりに1つのifテストで簡略化することができますか?
このコードは、2つのifテストの代わりに1つのifテストで簡略化できますか?
nilと
''は異なる値です。もし
s` がどちらでもないことをテストする必要があるのなら、両方と比較するのが一番意図がはっきりするからです。
それと、生成されたバイトコードを使ったいくつかの代替案もあります:
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
Lua 5.1と5.2(私のマシンでは)では2番目が最速ですが、その差はごくわずかです。しかし、その差はごくわずかです。