2010-06-12 3 views
7

Quale è meglio?Utilizzare if ... else ... o solo se ... per determinare cosa viene restituito

function test($val = 'a') { 
    if($val == 'a') { 
     return true; 
    } 
    return false; 
} 

o

In effetti, essi fanno la stessa cosa. Se $val non è 'a', la funzione restituisce false. Solo preferenze personali?

+0

E se il blocco else ha molte linee e immagino parte di una ricorsione? Questo mi sembra un po 'confuso (non riesco a formattare correttamente il codice nei commenti?): 'Nodo privato deleteMin (Node x) { if (x.left == null) restituisce x.right; x.left = deleteMin (x.left); x.N = dimensione (x.left) + dimensione (x.right) + 1; return x; } ' – allanx2000

risposta

7

Penso che si tratti di come il confronto "sente" per voi. Userei il primo se sembrava che $ val fosse "a" fosse un caso speciale, e di solito la funzione restituiva false. Userei il secondo se fosse più come se fosse 50/50 in che direzione andrebbe.

22

Sono uguali. Tuttavia, per questo caso, preferisco:

function test($val = 'a') { 
    return ($val == 'a'); 
} 
0

mi piacerebbe restare con il primo, il più semplice il codice (e di facile lettura) il meglio.

9

Oltre a questi, preferisco il secondo per chiarezza. Tuttavia, in realtà preferisco

return ($val == 'a'); 
0

Mentre si sta leggendo il secondo blocco di codice. Puoi facilmente capire che restituisce false quando val non è uguale a 'a'.

Ma al primo blocco di codice è un po 'difficile capire quando restituirà false. Non è così difficile in questo esempio, ma presumo che le tue clausole if non saranno così semplici.

3

In PHP, se non viene eseguito nulla in una funzione e viene raggiunta la fine, sarà come se restituisse false. Per questo motivo non è mai necessario restituire false se non altro deve essere eseguito all'interno della funzione. Questo ci lascia con questo:

function test($val = 'a') { 
    if($val == 'a') { 
     return true; 
    } 
} 

Se v'è un solo comando dopo un'istruzione if, elseif altrimenti, le parentesi graffe ("{" "}") non sono necessari, che ci fanno finire con questo :

function test($val = 'a') { 
    if($val == 'a') return true; 
} 

In PHP è possibile restituire un confronto, che verrà eseguito immediatamente prima della restituzione. Questo è quello che hanno suggerito alcuni degli altri che hanno risposto a questo post. Fare questo ci lascia con questo codice:

function test($val = 'a') { 
    return ($val == 'a'); 
} 

Vero verrà restituito se il blocco "($ val == 'a')" è vera, altrimenti falso sarà restituito, in quanto non è vero. Logica.

In realtà tendo ad usare la seconda convenzione che ho presentato, solo per abitudine. Vedendo la bellezza della semplicità del terzo presentato dagli altri probabilmente passerò a quello quando applicabile.

EDIT:

Se si vuole scrivere il codice che è più facile per gli esperti non PHP per capire, un'altra alternativa potrebbe essere il seguente:

function test($val = 'a') { 
    if($val == 'a') 
     return true; 
    else 
     return false; 
} 

direi che non utilizza le parentesi graffe nelle circostanze descritte nel mio secondo esempio fornisco codice più facile da leggere, poiché le parentesi tendono a rendere il codice disordinato se non contengono più righe.

+3

Questo può essere vero e preciso, ma i primi due esempi non daranno un codice chiaro e di facile comprensione per chiunque non sia un esperto di PHP. Solo il terzo sarà chiaro alla maggior parte dei programmatori. –

+0

Detto questo, questo post riguarda programmatori PHP, quindi il suo punto è perfettamente valido. E ho imparato qualcosa di nuovo su PHP oggi! – Blindy

+0

Sono d'accordo sul fatto che il terzo esempio sia il più logico dal momento che implica l'esistenza di "return false". Ma poi, conoscendo e comprendendo questo tipo di cose su un linguaggio di programmazione, può aiutare a scrivere un codice più facile da comprendere e più efficiente, così l'ho scritto. – Emanuel

2

Credo davvero che sia quello che ha sempre cercato di trasmettere per il codice. Se si guarda a questo:

function test($val = 'a') { 
    if($val !== 'a') { 
     return false; 
    } 
    return true; 
} 

Si può vedere che fa la stessa cosa come i tuoi esempi, ma ha un intento diverso. Per questo esempio in realtà non avrebbe alcun senso avere:

function test($val = 'a') { 
    if($val !== 'a') { 
     return false; 
    } 
    else { 
     return true; 
    } 
} 

penso che @Ned aveva, perché sta cercando di trasmettere l'intenzione per l'operazione if.

+2

La tua (prima) variante è un bell'esempio del percorso felice. http://en.wikipedia.org/wiki/Happy_path –

+0

'Pillola blu o pillola rossa ...' LOL! La strada felice è sempre la strada migliore! – Gutzofter

0

Anziché:

L'approccio seguito è migliore, non c'è più overhead di else e codice è anche breve:

function test($val = 'a') { 
    if($val == 'a') { 
     return true; 
    } 
    return false; 
} 

potrebbe essere reso ancora più breve:

function test($val = 'a') 
{ 
    return ($val == 'a'); 
} 
1

Se non si stesse restituendo boolean sceglierei il primo modulo. In questo caso, farei semplicemente:

return ($val == 'a'); 

come altri hanno suggerito.