Durante la revisione del codice, è stato presentato un suggerimento minore sul fatto che alcuni comportamenti impliciti siano resi espliciti. Il revisore ha sfogliato il codice in questione, è diventato confuso dopo aver erroneamente interpretato lo scopo del codice, e ha scoperto la causa solo dopo un'attenta analisi. Di seguito sono riportate la pratica implicita e la pratica suggerita, in questo ordine:
stuffLookup = {--[[functions in here]]}
function doStuff(stuffType, ...)
assert(stuffLookup[stuffType], "stuffType is not a valid stuff!")(...)
end
function doStuff2(stuffType, ...)
if stuffLookup[stuffType] then stuffLookup[stuffType](...) else error("stuffType is not a valid stuff") end
end
assert
è usato frequentemente senza invocare un'altra funzione come in questo caso, quindi a prima vista il revisore non ha visto un'invocazione così piccola alla fine dell'asserzione e ha assunto che la linea non servisse a nulla dopo un controllo di integrità.
L'argomento a favore della pratica 1 era che è sintatticamente corretto, che è usato nei documenti Lua, che è più veloce e che se qualcuno non ha previsto di essere usato in questo modo è stata colpa loro. L'argomento a favore della pratica 2 era che la natura della pratica 1 poteva essere facilmente fraintesa, che si trattava di un'ideologia implicita che non era sufficientemente leggibile e che considerare le prestazioni era un'ottimizzazione prematura (il codice non era progettato per essere usato frequentemente e il tempo di ricerca era trascurabile)
Ci sono meriti in merito alle preoccupazioni e ai punti di vista di entrambe le parti?