2010-11-09 11 views
6

parlando di prestazioni java .. cosa c'è di meglio? if..else o più semplice seCosa c'è di meglio? if..else or multiple simple if

if(condition) { 
    some_code; 
    return value; 
} 
else if(condition) { 
    some_code; 
    return value; 
} 
else if(condition) { 
    some_code; 
    return value; 
} 
else { 
    some_code; 
    return value; 
} 

o

if(condition) { 
    some_code; 
    return value; 
} 

if(condition) { 
    some_code; 
    return value; 
} 

if(condition) { 
    some_code; 
    return value; 
} 

some_code;  
return value; 

Mi piacciono i tuoi pensieri

thnx!

+0

Se c'è una differenza di prestazioni, è probabilmente trascurabile. –

+4

Non sono esperto, ma sarei sorpreso se ci fossero delle differenze - ma la risposta a tutte le domande sulle prestazioni è "provaci e vedi". (E l'altra risposta è "questo probabilmente non è il collo di bottiglia"). Mi sembra una domanda * style *. – Cascabel

+0

Non importa "some_code", solo come java esegue l'istruzione "if" – dnlmax

risposta

16

Non c'è differenza, in termini di prestazioni. Scegli l'opzione più leggibile, che potrebbe essere o in base a ciò che fa il codice.

in generale non preoccuparsi di questi micro-ottimizzazioni. L'ottimizzazione dovrebbe venire solo dopo aver determinato che c'è un problema di prestazioni che deve essere risolto.

"Dovremmo dimenticare le piccole efficienze, diciamo circa il 97% delle volte: premature optimization è la radice di tutti i mali." — Donald Knuth

+3

+1 per "non preoccuparti di μ-opt" –

+2

jeje, grande citazione! – dnlmax

0

Sono sicuro che un singolo if sarebbe meglio, perché ogni volta che si incontra una condizione vera, può tranquillamente saltare le altre alternative else poiché non verranno eseguite. Se hai usato più if s, tutte le condizioni successive dovrebbero essere valutate comunque (anche se, come penso che tu stia supponendo, si escluderebbero a vicenda).

+0

Ma nell'esempio non verranno comunque eseguiti perché la funzione ritorna prima che vengano raggiunti. –

+0

Non fa comunque la differenza in questo esempio, poiché esiste un'istruzione 'return' in ogni corpo' if'. –

+0

Ma può farlo comunque a causa della forma del costrutto 'return'. –

1

Il se ... altro esempio si dà non ha bisogno dei return s se questo è in funzione senza alcun valore di ritorno. In tal caso, il se ... else sarà più facile da leggere.

Inoltre, if ... else dovrebbe essere preferito perché rende esplicito che questi casi sono mutuamente esclusive.

Se c'è una differenza di prestazioni qui, poi il compilatore/interprete fa schifo.

+0

Se c'è una differenza di prestazioni, il compilatore fa schifo. – starblue

+0

Potrebbe essere l'interprete, per una lingua interpretata. – uckelman

0

A seconda della situazione.

Se le condizioni sono mutuamente esclusivi, utilizzare else. Ciò farà sì che Java non verifichi nessuna delle condizioni dopo quella che risulta essere vera.

Se non si escludono, quindi utilizzando un elenco di if senza altro potrebbe causare più casi a verificarsi.

Nel tuo caso, con ritorni in ciascuno, le prestazioni saranno le stesse perché lo stesso numero di comparazioni dovrà essere fatto indipendentemente da cosa.

+0

Non farà alcuna differenza se le condizioni si escludono a vicenda. (Sarebbe un se non ci fosse un ritorno in ogni "allora" clausola ...) –

0

io non mi preoccuperei prestazioni qui tanto quanto la leggibilità del codice e la manutenibilità. Come accennato, le prestazioni saranno essenzialmente identiche dopo che il codice è stato compilato.

Preferisco essere più esplicito riguardo le mie condizioni, invece di permettere al comportamento di "cadere" implicitamente.

Inoltre, il singolo se non verrà valutato più veloce del if else. Il percorso else non verrà mai controllato se il caso è vero.