Pagina 1 di 6

If innestati o AND?

MessaggioInviato: 3 lug 2015, 23:59
da wizard
Salve,
la domanda che sto per porvi è probabilmente stupida ma non conosco la risposta e perciò chiedo a voi: dal punto di vista della complessità computazione, è meglio scrivere if innestati o mettere in un unico if tutte le condizioni in AND? Mi spiego meglio con un esempio.
E' meglio scrivere:
Codice: Seleziona tutto
if(x == cond1)
{
      if(y == cond2)
      {
           if(z == cond3)
           {

oppure
Codice: Seleziona tutto
if(x == cond1 && y == cond2 && z == cond3)
{


Ho poi un'altra domanda: in generale, come posso capire se a parità di "risultato ottenuto", un modo di scrivere un'istruzione è più vantaggioso di un altro?
Grazie in anticipo per le risposte O_/

Re: If innestati o AND?

MessaggioInviato: 4 lug 2015, 0:09
da simo85
Il primo ha senso se dentro il primo blocco di comparazione della variabile x, svolgi qualcosa indipendentemente dai valori di y e z.

Altrimenti il secondo caso è OK.
Le ottimizzazioni le fa il compilatore, se le fa.

Re: If innestati o AND?

MessaggioInviato: 4 lug 2015, 0:40
da TardoFreak
E' preferibile mettere le condizioni logiche a meno che nei blocchi sotto gli if non si debba fare anche qualcos'altro, come dice Foto Utentesimo85.
E' anche più pulito, più bello e di sicuro più efficiente anche se il compilatore ottimizza già per conto suo.

Re: If innestati o AND?

MessaggioInviato: 4 lug 2015, 1:32
da Sjuanez
Addirittura nella pratica del refactoring, per migliorare la leggibilità, consigliano di calcolare fuori dal controllo IF il risultato dell'espressione logica.

Codice: Seleziona tutto
#Esempio: cercare la moglie

$moglie_ok = $sa_cucinare && $e_bella && $ci_sa_fare;

If ($moglie_ok){
     print('Mamma, ho trovato la donna della mia vita');
}else{
     print('Mamma, la figlia della parrucchiera ha poi imparato a cucinare?');
}


Questo per dire che dovresti sempre cercare di mantenere il codice compatto si, ma soprattutto leggibile. Un'istruzione esplicita in più non farà una grande differenza per la macchina, ma quando poi vorrai modificare o debuggare il tuo software si.

Buon coding! O_/ O_/ O_/

Re: If innestati o AND?

MessaggioInviato: 4 lug 2015, 1:58
da WALTERmwp
Ciao Foto Utentewizard a quanto già autorevolmente riportato per questo
wizard ha scritto:Ho poi un'altra domanda: in generale, come posso capire se a parità di "risultato ottenuto", un modo di scrivere un'istruzione è più vantaggioso di un altro?
... oltre ad affidarti a un valido compilatore, se proprio proprio ti vuoi togliere il dubbio, puoi andarti a leggere il listato in assembly ( maamemipiace scrivere "assembler") e contare i tempi d'esecuzione per ogni istruzione seguendo poi i possibili vari rami del flusso del programma se l'istruzione in causa diventa qualcosa di più articolato ... ma è un lavoraccio.

Saluti

Re: If innestati o AND?

MessaggioInviato: 4 lug 2015, 3:10
da TardoFreak
Devo dirti la verità Foto UtenteSjuanez: nell' esame di programmazione che ho passato il mese scorso si incaxxavano se facevamo come hai detto tu.
A qualcuno l'uso di una variabile in più è costato qualche punto all'esame di laboratorio.
La motivazione, sicuramente didattica perché personalmente preferisco lo stile da te riportato, era: non si introducono variabili se non sono necessarie.
E questo valeva anche per i controlli: un controllo inutile in più è un errore.
Anche un "if" inutile è un errore.
Ripeto, probabilmente si sono impuntati per motivi didattici ma tant'è. :?

Re: If innestati o AND?

MessaggioInviato: 4 lug 2015, 7:41
da Sjuanez
da TardoFreak » 4 lug 2015, 3:10

E io che pensavo di fare tardi la notte!

Quello che dici tu è corretto ed è giusto che in ambito accademico si faccia pressione sull'efficienza. Nel ragionamento, usare variabili in più può portare a generare codice inefficiente ed una mente lenta.

Tuttavia mi pare strano che non vi abbiano indirizzato verso gli standard attuali dell'industria, almeno in teoria. Quando ho tempo seguo qualche corso di programmazione anch'io, perlopiù americani, e la leggibilità del codice è fondamentale nell'industria.

Quindi, siccome i computer di oggi non soffrono il colpo, si consiglia di preferire la leggibilità all'efficienza estrema.

Se ci pensi, è anche valido per i nomi di funzioni e variabili, che possono essere lunghi quanto la massima efficienza vorrebe "a", "b", ctr();

Tutto questo per dire che la resilienza del codice è un valore molto più elevato dell'efficienza a tutti i costi.

Però, se:
al nostro amico oppure a te, un approccio stringato e più compatto possibile piace e riuscite dopo mesi a riprendere il vostro codice senza problemi e non dovete lavorare con gli altri sullo stesso sorgente, non vedo cosa ci sia di male.

Ho riportato quello che so, sarebbe bello sentire un professionista come Foto UtenteDarwinNE a riguardo.

O_/ O_/ O_/

Re: If innestati o AND?

MessaggioInviato: 4 lug 2015, 8:50
da simo85
Per me i nomi comprensibili e la leggibilità del codice sono importanti. L'indentazione un po' meno, si aggiusta.

Ma la prossima volta che mi beccho dichiarazioni del tipo

Codice: Seleziona tutto
int a;
double b;
char c;

con nessun commento, do una testata al monitor. :evil:

Re: If innestati o AND?

MessaggioInviato: 4 lug 2015, 8:56
da Sjuanez
L'indentazione un po' meno


Se devo scegliere tra indentazione e le variabili stringate, io opto per la prima! Al massimo le variabili me le sostituisco nel codice, ma mettere in ordine 15000 righe... non fatemi questo!

Poi a volte prendi del codice di altre nazioni o altri editor dove il tab è di soli 3 caratteri e tu vai a modificare il tutto ma non sopporti i tuoi tab diversi da quelli originali e allori mordi il cavo del mouse!!!

La migliore idea l'hanno avuta con Python: vuoi intendare? e allora noi lo rendiamo parte del codice! O_/ O_/

Re: If innestati o AND?

MessaggioInviato: 4 lug 2015, 8:59
da simo85
Sjuanez ha scritto:mettere in ordine 15000 righe... non fatemi questo!

Naa per quello c'è indent.. http://linux.die.net/man/1/indent

:D