Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

If innestati o AND?

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] If innestati o AND?

Messaggioda Foto Utentewizard » 3 lug 2015, 23:59

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_/
Avatar utente
Foto Utentewizard
25 1 5
Frequentatore
Frequentatore
 
Messaggi: 162
Iscritto il: 12 gen 2013, 17:48

5
voti

[2] Re: If innestati o AND?

Messaggioda Foto Utentesimo85 » 4 lug 2015, 0:09

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.
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

4
voti

[3] Re: If innestati o AND?

Messaggioda Foto UtenteTardoFreak » 4 lug 2015, 0:40

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.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

2
voti

[4] Re: If innestati o AND?

Messaggioda Foto UtenteSjuanez » 4 lug 2015, 1:32

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_/
Più so e più mi accorgo di non sapere.

Qualsiasi cosa abbia scritto, tieni presente che sono ancora al mio primo rocchetto di stagno.
Avatar utente
Foto UtenteSjuanez
11,3k 6 8 13
G.Master EY
G.Master EY
 
Messaggi: 3479
Iscritto il: 18 mar 2015, 13:48

1
voti

[5] Re: If innestati o AND?

Messaggioda Foto UtenteWALTERmwp » 4 lug 2015, 1:58

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
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
30,2k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8986
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

2
voti

[6] Re: If innestati o AND?

Messaggioda Foto UtenteTardoFreak » 4 lug 2015, 3:10

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'è. :?
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

1
voti

[7] Re: If innestati o AND?

Messaggioda Foto UtenteSjuanez » 4 lug 2015, 7:41

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_/
Più so e più mi accorgo di non sapere.

Qualsiasi cosa abbia scritto, tieni presente che sono ancora al mio primo rocchetto di stagno.
Avatar utente
Foto UtenteSjuanez
11,3k 6 8 13
G.Master EY
G.Master EY
 
Messaggi: 3479
Iscritto il: 18 mar 2015, 13:48

1
voti

[8] Re: If innestati o AND?

Messaggioda Foto Utentesimo85 » 4 lug 2015, 8:50

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:
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

0
voti

[9] Re: If innestati o AND?

Messaggioda Foto UtenteSjuanez » 4 lug 2015, 8:56

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_/
Più so e più mi accorgo di non sapere.

Qualsiasi cosa abbia scritto, tieni presente che sono ancora al mio primo rocchetto di stagno.
Avatar utente
Foto UtenteSjuanez
11,3k 6 8 13
G.Master EY
G.Master EY
 
Messaggi: 3479
Iscritto il: 18 mar 2015, 13:48

1
voti

[10] Re: If innestati o AND?

Messaggioda Foto Utentesimo85 » 4 lug 2015, 8:59

Sjuanez ha scritto:mettere in ordine 15000 righe... non fatemi questo!

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

:D
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

Prossimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 7 ospiti