2012-02-13 13 views
14

Questa può sembrare una domanda stupida, e ho esitato a postarlo, ma ancora: se qualcosa deve essere eseguito solo in una determinata condizione, quale di questi è più efficiente :if-> return vs. if-> else efficiency

A.

if (condition) { 
    // do 
    // things... 
} 

B.

if (!condition) { return; } 
// do 
// things... 
+1

Hai misurato questo? Cosa hai trovato? – Steven

+8

È una cosa di stile. La performance non è rilevante; entrambi producono codice macchina quasi identico. Se vuoi evitare la 'programmazione orizzontale', potresti preferire B per evitare condizioni nidificate. –

+0

Controlla http://jsperf.com/ quando hai domande come questa. Sito molto utile! – mrtsherman

risposta

6

Il vero ques è Dovresti davvero preoccuparti?

Dico NO! È più importante avere un codice più leggibile che eseguire qualche micro ottimizzazione.

9

Si prega di scegliere la cosa che è più leggibile. Le ottimizzazioni delle prestazioni a questo livello non sono quasi mai un problema. Anche le parti di framework (come il framework .NET) sensibili alle prestazioni non beneficiano di tale micro ottimizzazione.

12

Sono ugualmente efficienti, ma lo standard B viene in genere considerato di migliore leggibilità, soprattutto quando viene utilizzato per eliminare diverse condizioni nidificate.

2

Mentre concordo sul fatto che prima si scelga la leggibilità, vado avanti aggiungendo alcune informazioni: In C# non c'è differenza. Compilare la stessa cosa (quando ottimizzato costruendo la modalità di rilascio). Altre lingue? Chissà, sono sicuro che alcuni di loro lo considerano diverso, ma le probabilità che tu abbia davvero bisogno di preoccuparti di questo sono scarse per niente.

4

È una cosa di stile. La performance non è rilevante; entrambi producono codice macchina quasi identico.

alcune considerazioni sullo stile:

Se si vuole evitare di 'programmazione orizzontale', si potrebbe desiderare di preferire B per evitare condizioni nidificate. Ad esempio, se si desidera aggiungere eccezioni senza influenzare il flusso del metodo troppo:

A:

public String getDescription(MyObject obj) { 
    if (obj == null) { 
     return ""; 
    } else { 
     if (!obj.isValid()) { 
      return "invalid"; 
     } else { 
      ... 
     } 
    } 
} 

B:

public String getDescription(MyObject obj) { 
    if (obj == null) { 
     return ""; 
    } 

    if (!obj.isValid()) { 
     return "invalid"; 
    } 

    .... 
} 

Ma la differenza è minima se mi chiedete. Sicuramente non vale una "guerra stile codice".