È possibile far ritornare 2 valori in 2 condizioni diverse?
Del tipo:
if(espressione)
return a;
else
return b;
È possibile far ritornare 2 valori in 2 condizioni diverse?
Del tipo:
if(espressione)
return a;
else
return b;
E' buona norma avere un unico punto di ritorno (quando scrivere il metodo così è semplice).
questo è lecito. Come hai fatto tu ho la return dentro l'if (ma come ti ho detto sopra mi piace avere, quando posso, un unico punto di uscita)Codice PHP:
private int metodo(){
int ret = 0;
// do your stuff here
if (condizione) {
ret = 10;
}else{
ret = 12;
}
return ret;
}
RTFM Read That F*** Manual!!!
Concordo pienamente.Originariamente inviato da valia
E' buona norma avere un unico punto di ritorno (quando scrivere il metodo così è semplice).
Questo ragionamento è logicamente indotto anche dalla definizione di funzione: una regola che mappa N insiemi di valori (il dominio) in un unico insieme di valori (detto codominio). Una funzione, per definizione, ritorna uno ed un solo risultato. Ergo, ci dovrebbe essere uno ed un solo return.
Il tutto, inoltre, facilita la manutenzione del codice stesso: avere diversi "return" sparsi all'interno di un metodo può rendere le cose davvero complicate in fase di debug.
Ciao.![]()
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
A me aiuta a livello di tracciamento, quando devo loggare il valore di ritorno. In questo caso non ho ripetizioni inutili di codice (ripetizioni che aggiungo quando la return unica creerebbe codice ingestibile)Originariamente inviato da LeleFT
Il tutto, inoltre, facilita la manutenzione del codice stesso: avere diversi "return" sparsi all'interno di un metodo può rendere le cose davvero complicate in fase di debug.
Ciao.![]()
ho dimenticato una precisazione: il tipo del valore di ritorno è unico, il valore puoi deciderlo dove ti pare nel corpo del metodo, ma il tipo è unico.
non so se l'autore del thread intendeva questo con 2 valori
RTFM Read That F*** Manual!!!
E' possibile farlo ma sarebbe bene evitare per i motivi descritti dai miei predecessori.
Un caso in cui si ricorre a questa tecnica è quando il valore di ritorno lo si acquisisce all'interno di cicli annidati.
Altro caso può essere la ricerca dell'ottimizzazione su programmi in real time.
E' anche abbastanza usata all'interno di blocchi try catch.
...
qui ricadi sul modo di programmare e su come scrivi le condizioni del ciclo. qualche piccolo accorgimento e non hai diversi punti di uscita (e a volte non devi usare manco break odiato da tanti).Originariamente inviato da Caiodark
E' possibile farlo ma sarebbe bene evitare per i motivi descritti dai miei predecessori.
Un caso in cui si ricorre a questa tecnica è quando il valore di ritorno lo si acquisisce all'interno di cicli annidati.
Altro caso può essere la ricerca dell'ottimizzazione su programmi in real time.
E' anche abbastanza usata all'interno di blocchi try catch.
Solo nel caso di applicazioni real-time ammetto più punti di ritorno, ma real-time + linguaggio interpretato che passa da virtual machine cozzano un po'
ps prova a dover mettere per ogni funzione un indicatore di dove entri e di dove esci, fidati che ti ingegni per non avere più di un return!!!
RTFM Read That F*** Manual!!!
Dipende da quanto costano questi piccoli accorgimenti in termini di tempo di esecuzione e di sviluppo. Se sono sopportabili conviene seguire la regola generale.Originariamente inviato da valia
qui ricadi sul modo di programmare e su come scrivi le condizioni del ciclo. qualche piccolo accorgimento e non hai diversi punti di uscita (e a volte non devi usare manco break odiato da tanti).
Si può fare, ma il codice è diverso dal Java che si è abituati a vedere.Solo nel caso di applicazioni real-time ammetto più punti di ritorno, ma real-time + linguaggio interpretato che passa da virtual machine cozzano un po'![]()
Basta tenere a mente che queste regole hanno costo che nell'80% dei casi val la pena pagare, a patto di applicarle bene.ps prova a dover mettere per ogni funzione un indicatore di dove entri e di dove esci, fidati che ti ingegni per non avere più di un return!!!
...
// funzione di ricerca di object secondo determinati criteri, termina appena trova object validoOriginariamente inviato da Caiodark
Dipende da quanto costano questi piccoli accorgimenti in termini di tempo di esecuzione e di sviluppo. Se sono sopportabili conviene seguire la regola generale.
obj != null a piacere nel primo o nel secondo ciclo. Il vantaggio di non avere codice ripetuto, break o return intermedie lo paghi a costo di un controllo (che se fatto bene è solo su obj).Codice PHP:
Object ret = null;
for (primo ciclo && obj != null){
for (secondo ciclo){
if (condizione){
obj = valore;
}
}
}
In termini di prestazioni, non ho trovato sostanziali differenze tra uno e l'altro metodo (a meno di usare un pc ante-guerra).
In termini di debug...un'altro mondo!!!
non ho detto che non si può fare, ho detto che il pensiero di avere qualcosa di real-time passando per una vm mi fa sorridere. Java (o meglio un linguaggio managed) è poco adatto al real-time, solo questo.Originariamente inviato da Caiodark
Si può fare, ma il codice è diverso dal Java che si è abituati a vedere.
Esatto, quando sei in debug ti assicuro che aiutano e tanto. Mi piacerebbe ci fosse qualcosa che in java con una macro riuscisse ad abilitare/disabilitare le tracce (la differenza in termini di prestazioni in questo caso è evidente).Originariamente inviato da Caiodark
Basta tenere a mente che queste regole hanno costo che nell'80% dei casi val la pena pagare, a patto di applicarle bene.
RTFM Read That F*** Manual!!!
Il costo qui è rappresentato dal ciclo interno che non viene interrotto a prescindere, inoltre se c'é più di una corrispondenza ritornerai l'ultima invece che la prima il che è contro-intuitivo ed andrebbe commentato.Originariamente inviato da valia
obj != null a piacere nel primo o nel secondo ciclo. Il vantaggio di non avere codice ripetuto, break o return intermedie lo paghi a costo di un controllo (che se fatto bene è solo su obj).
In termini di prestazioni, non ho trovato sostanziali differenze tra uno e l'altro metodo (a meno di usare un pc ante-guerra).
In termini di debug...un'altro mondo!!!
Niente che un break non possa risolvere.
Di solito non ho di questi problemi, ho funzioni abbastanza asciutte e soprattutto le ho scritte io.Esatto, quando sei in debug ti assicuro che aiutano e tanto. Mi piacerebbe ci fosse qualcosa che in java con una macro riuscisse ad abilitare/disabilitare le tracce (la differenza in termini di prestazioni in questo caso è evidente).
...
infatti è solo un esempio, quel controllo se leggi bene ho detto che puoi metterlo anche nel ciclo interno (o un break come dici tu).Originariamente inviato da Caiodark
Il costo qui è rappresentato dal ciclo interno che non viene interrotto a prescindere, inoltre se c'é più di una corrispondenza ritornerai l'ultima invece che la prima il che è contro-intuitivo ed andrebbe commentato.
Niente che un break non possa risolvere.
quanto sei fortunato, questo è il caso in cui io riesco a scrivere le cose per beninoOriginariamente inviato da Caiodark
Di solito non ho di questi problemi, ho funzioni abbastanza asciutte e soprattutto le ho scritte io.
RTFM Read That F*** Manual!!!