Newsgroup: it.comp.java
Titolo: Dubbio su if-else

Ciao,
ho notato che spesso alcuni creano dei costrutti del tipo:
if (cond1) {
   foo
}
else if (cond2) {
   bar
}
<altri if dello stesso tipo, con else>
Io invece li ho sempre costruiti in questo modo:
if (cond1) {
    foo; return;
}
if (cond2) {
    bar; return;
}
<altri if dello stesso tipo, senza else>
Ragionandoci, la differenza che c'è tra la situazione A e B è che: in A, 
cond1 e cond2 sono mutuamente esclusive [cioè: se si entra nel ramo 
'true' di un if, non si entra in nessuno dei rami successivi], mentre in 
B no.
Confermate?
Grazie

 Confermate?
se c'e' l'else:
se cond1==true non esegue quello che c'e' in cond2 anche se
cond2==true.
Nella tua versione controlla entrambe le condizioni e nel caso le
esegue entrambe.
Le due cose non sono equivalenti.
Ciao Jack

 Confermate?
praticamente si, anche se ci sono metodi decisamente meno grossolani
se vuoi ottenere lo stesso effetto.

> }
J> Nella tua versione controlla entrambe le condizioni e nel caso le
J> esegue entrambe.
Occhio al codice!!!!!!!!!!!!!!!!!!!!!!!!!
Se cond1 è vera esce dal metodo!
-- 
 /\           ___                                    Ubuntu: ancient
/___/\_|_|\_|__|___Gian Uberto Lauri_____               African word
  //--\| | \|  |   Integralista GNUslamico            meaning "I can
\/                   e coltivatore diretto               not install
                               di software                   Debian"
a Cesare avrei detto di scrivermi | I would have told Caesar to write
a 
fn...@rat.vg
                    | me at 
fn...@rat.vg

 writes:
r> praticamente si, anche se ci sono metodi decisamente meno grossolani
r> se vuoi ottenere lo stesso effetto.
Piano col grossolano.
Č vero che  la teoria della programmazione strutturata  parla di un solo
punto di usita (perchč formulata con  in mente i flowchart) e che i goto
sono come l'arsenico.
Ma return č sempre lui, anche se non č posto alla fine del blocco, non
si creano usite multiple.
In compenso č piů chiaro riscrivere una cosa del tipo:
valuta cond1
se cond1
allora
   valuta cond2
   se cond2
   allora
     // tante istruzioni
     // tante istruzioni
     // tante istruzioni
     // tante istruzioni
     // tante istruzioni
     // tante istruzioni
     // tante istruzioni
     // tante istruzioni
     // tante istruzioni
     // tante istruzioni
     // tante istruzioni
     // tante istruzioni
     // tante istruzioni
   altrimenti
     segnala problemi per cond2
   fine se
altrimenti
  segnala problemi per cond1
fine se
esci
in questa forma
valuta cond1
se non cond1
allora
  segnala problemi per cond1
  esci
fine se
valuta cond2
se non cond2
allora
  segnala problemi per cond2
  esci
fine se
// tante istruzioni
// tante istruzioni
// tante istruzioni
// tante istruzioni
// tante istruzioni
// tante istruzioni
// tante istruzioni
// tante istruzioni
// tante istruzioni
// tante istruzioni
// tante istruzioni
// tante istruzioni
// tante istruzioni
piů immediata e compatta.


 }
Trova la seconda versione più leggibile e controllabile anche se non
sempre e' corretta.
In certi casi il test da fare dipende dal precedente quindi non puoi
fare a meno di usare else..