Perché molti codici sono così?

 

Lo vedo spesso quando le persone postano il loro codice.

if(a==b){
Dothis;
Dothis;
etc;
}

Ora, questo non è un problema quando si leggono brevi pezzi di codice di altre persone.

Ma quando c'è molto codice, può renderlo quasi impossibile da seguire.

Penserei che molti avrebbero difficoltà a trovare errori nel proprio codice.

Perché non questo?

if(a==b)
{
Dothis
Dothis
etc
}

//Or

if(a==b)
  {
  Dothis
  Dothis
  etc
  }

 

Non c'è niente di male nel primo stile ( stile K & R ) (purché sia indentato). È molto usato nei linguaggi con questo tipo di sintassi (C, Java, Perl).

È, per esempio, il Java Standard e abbastanza leggibile IMO (purché indentato correttamente). [ Dato che mql4 prende in prestito pesantemente dalla sintassi in stile C, penso che menzionare questi altri linguaggi sia rilevante ]

Dovrebbe essere indentato però:


if(a==b){
   Dothis;
   Dothis;
   etc;
}


Il 2° esempio ( stile Allman ) è anche preferito da alcuni, ed è generalmente accettato per essere più leggibile (di nuovo con indentazione corretta)


if(a==b)
{
   Dothis;
   Dothis;
   etc;
}

ma il metodo che sembri scartare è abbastanza popolare altrove (per ragioni di leggibilità)

Il tuo ultimo esempio non mi piace affatto.

 

Lo stile allman è anche più facile da identificare le parentesi mancanti, specialmente negli alberi complessi se no.

 

Lo stile delle staffe è una preferenza dei programmatori, non c'è davvero un metodo giusto o sbagliato Imo. Lo stile K&R è il migliore ;-). Perché occupare una riga in più per una parentesi graffa di apertura .... quello che mi interessa davvero è a quale if{statement} appartiene. Esempio quello che sembra migliore e più facile da capire.

if(.............................)
    {
    if(.............................)
        {
        if(.............................)
            {
            if(.............................)
                {
                if(.............................)
                    {
                    if(.............................)
                        {
                        if(.............................)
                            {
                            if(.............................)
                                {
                                if(.............................)
                                    {
                                    if(.............................)
                                        {
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }

O questa versione:

if(.............................){
    if(.............................){
        if(.............................){
            if(.............................){
                if(.............................){
                    if(.............................){
                        if(.............................){
                            if(.............................){
                                if(.............................){
                                    if(.............................){
}   }   }   }   }   }   }   }   }   }

E ancora meglio.

if( !.............................) return
if( !.............................) return
if( !.............................) return
if( !.............................) return
if( !.............................) return
if( !.............................) return
if( !.............................) return
if( !.............................) return
if( !.............................) return
if( !.............................) return
Imo, l'ultima versione sembra più naturale di come scrivo nella vita reale. Riga per riga.
 

Io faccio così:

if(.............................)
{if(.............................)
 {if(.............................)
  {if(.............................)
   {if(.............................)
    {if(.............................)
     {if(.............................)
      {if(.............................)
       {if(.............................)
        {if(.............................)
}}}}}}}}}
 

Mi piace la discussione.

E che dire della preferenza nella codifica della dichiarazione else . Preferisco il primo esempio, anche se alcuni editor non possono piegare/svolgere tali blocchi. Il secondo è un compromesso. Il terzo è ancora più coerente, ma illeggibile.

if (cond) {
   command;
} else if (cond) {
   command;
} else {
   command;
}

o

if (cond) {
   command;
}
else if (cond) {
   command;
} 
else {
   command;
}

o

if (cond) {
   command;
} 
else {
   if (cond) {
      command;
   }   
   else {
      command;
   }  
}
 
In una certa misura non importa, la cosa principale che conta è la coerenza nell'applicare lo stile scelto... tutti abbiamo le nostre preferenze, naturalmente
 

Non uso più molto else. C'è stato un problema in cui sono stato costretto ad usare else un po' di tempo fa (non ricordo il problema). Quando ho usato else, è andato qualcosa come questo.

if (cond) { command; } else 
if (cond) { command; } else {
   command;
}

Ora però il mio primo insegnamento sulla codifica di qualcosa come sopra sarebbe.

if( cond ){ command; return; }
if( cond ){ command; return; }
command;

Sì, trasformerò un codice di tre righe in una funzione 8)))

 
SDC:

Faccio se altro così

Personalmente lo trovo chiaro come il fango
 
RaptorUK: Personalmente lo trovo chiaro come il fango
Mi fa solo male agli occhi :{
 
RaptorUK:
In una certa misura non importa, la cosa principale che conta è la coerenza dell'applicazione dello stile scelto... tutti noi abbiamo le nostre preferenze, naturalmente

Sono d'accordo con Raptor. Argomento su nulla. Mi sento molto più frustrato quando le persone postano il loro codice qui senza usare SRC. Come codificano il loro programma dipende da loro, a meno che non abbiano intenzione di chiedere aiuto.