Questi tipi di blocchi if-elseif-else appaiono dappertutto, e in numero non piccolo (quindi meno sono e meglio è). Ogni volta devo pensare e decidere: Voglio il più semplice o il più completo dei due ... e non voglio più pensarci.
Ad esempio, se mi aspetto solo uno dei tre numeri interi (0, 1, 2) ... non voglio sapere (lanciare o terminare) se ottengo qualcos'altro? (Nel caso dell'esempio n. 2, la funzione do_two () potrebbe essere attivata da qualsiasi valore diverso da 0 o 1). Ovviamente, questo può dipendere se voglio che il mio codice si rompa o continui incontrando un'anomalia, che i test rigorosi dovrebbero comunque rilevare (ma chi può mai essere sicuro?). Ma sto cercando una risposta che sia appropriata in tutti, o nella maggior parte dei casi. Per favore spiega la tua risposta, se il tuo ragionamento è diverso dal mio.
NOTA RIGUARDO AL DUPLICATO: Non penso che questo sia un duplicato per due motivi: le risposte alla domanda suggeriscono di utilizzare le istruzioni switch e l'astrazione del codice. Non uso le istruzioni switch per qualcosa di così piccolo a causa del sovraccarico, non mi piace affatto molto. In secondo luogo, se il codice può essere astratto, potrei comunque variare molto bene per eseguire questi controlli ... più un overhead. La mia domanda è mirata alla necessità di coprire i casi d'angolo usando l'ultimo. La maggior parte delle persone, nella mia esperienza (che è minima), passerebbe all'utilizzo dell'Esempio # 1 se SCRUMing. Penso che il punto migliore (commento - > risposta?) Sia sì, c'è una differenza e dipende dal fatto che sto codificando in modo difensivo.
Esempio 1:
if(!is_null(variable) && is_integer(variable))
{
if(variable == 0)
do_zero();
elseif(variable == 1)
do_one();
elseif(variable == 2)
do_two();
else
throw_error();
}
Esempio n. 2:
if(!is_null(variable) && is_integer(variable))
{
if(variable == 0)
do_zero();
elseif(variable == 1)
do_one();
else
do_two();
}