Domanda

Lo tengo su una riga, se è corto. Ultimamente ho usato questo stile per espressioni operatore ternarie più lunghe o nidificate. Un esempio inventato:

$value = ( $a == $b ) 
            ? 'true value # 1'
            : ( $a == $c )
                ? 'true value # 2'
                : 'false value';

Personalmente quale stile utilizzi o trovi più leggibile?

Modifica: (su quando usare l'operatore ternario)

Di solito evito di usare più di 2 livelli di operatore ternario profondo. Tendo a preferire un operatore ternario profondo a 2 livelli rispetto a 2 livelli if-else, quando faccio eco a variabili negli script di template PHP.

È stato utile?

Soluzione

L'operatore ternario deve essere generalmente evitato, ma questo modulo può essere abbastanza leggibile:

  result = (foo == bar)  ? result1 :
           (foo == baz)  ? result2 :
           (foo == qux)  ? result3 :
           (foo == quux) ? result4 : 
                           fail_result;

In questo modo, la condizione e il risultato sono mantenuti insieme sulla stessa linea ed è abbastanza facile scorrere e capire cosa sta succedendo.

Altri suggerimenti

Provo a non usare un operatore ternario per scrivere condizioni nidificate. Sfida la leggibilità e non fornisce alcun valore aggiuntivo rispetto all'uso di un condizionale.

Solo se può stare su una sola linea, ed è chiaro cosa significhi, lo uso:

$value = ($a < 0) ? 'minus' : 'plus';

Personalmente, utilizzo l'operatore ternario solo se si adatta su una riga. Se ha bisogno di estendersi, allora è il momento del buon vecchio

if else if else

uno stile che a volte , che sto facendo emergere poiché non è stato menzionato, è così:

$result = ($x == y)
        ? "foo"
        : "bar";

.. ma di solito solo se il tutto su una riga lo rende troppo lungo. Trovo che avere il =? : tutto l'allineamento lo rende più ordinato.

Gli operatori ternari nidificati in PHP si comportano diversamente.

Questa sintassi supera tutti i seguenti test. Basato su http://deadlytechnology.com/web-development-tips/php- ternario-sintassi /

$myvar = ($x == $y)
?(($x == $z)?'both':'foo')
:(($x == $z)?'bar':'none');

.

Vedi: http://au.php.net/ternary

Esempio n. 3 "Comportamento ternario non ovvio" spiega perché quanto segue non funziona in PHP.

$x = 1;
$y = 2;
$z = 3;   
$myvar = ($x == $y) 
       ? "foo" 
       : ($x == $z) 
         ? "bar" 
         : "none";  
$myvar == 'none'; // Good

$x = 1;
$y = 2;
$z = 1;   
$myvar = ($x == $y) ? "foo" : ($x == $z) ? "bar" : "none";  
$myvar == 'bar'; // Good

$x = 1;
$y = 1;
$z = 3;   
$myvar = ($x == $y) ? "foo" : ($x == $z) ? "bar" : "none";  
$myvar == 'bar'; // Bad!

$x = 1;
$y = 1;
$z = 1;   
$myvar = ($x == $y) ? "foo" : ($x == $z) ? "bar" : "none";  
$myvar == 'bar'; // Bad!

Gli operatori ternari sono modi brevi ed efficaci per scrivere semplici istruzioni if. Non dovrebbero essere nidificati o difficili da leggere. Ricorda: scrivi il software una volta ma viene letto 100 volte. Dovrebbe essere più facile da leggere che da scrivere.

Tendo a racchiudere la condizione tra parentesi: (a == b)? 1: 0

Dissentirò con l'opinione comune. Sono un po 'come Imran con il mio stile di operatore condizionato. Se si adatta perfettamente su una riga, la tengo su una riga. Se non si adatta perfettamente su una riga, la rompo, ma utilizzo solo una scheda (4 spazi; ho VS impostato per inserire spazi per le schede) per il rientro. Non salto immediatamente su se - else , perché l'operatore condizionale ha molto più senso contestualmente. (Se non ha senso contestualmente, tuttavia, semplicemente non lo uso.)

Inoltre, non annido operatori condizionali. A quel punto, trovo che sia troppo difficile da leggere ed è ora di passare allo stile più dettagliato if - else .

L'esempio "inventivo" " è come lo indicherei, tranne per il fatto che vorrei rientrare dal margine sinistro, non in base a dove (o qualunque cosa si trovi sulla riga sopra.

Per i detrattori ternari - la leggibilità è il punto. Se non pensi che renda il codice più leggibile, non usarlo. Ma trovo il contrario, almeno in alcuni casi.

Il condizionale ternario può rendere il codice più pulito e più elegante e, soprattutto, aiutarti a mettere l'accento sulle cose giuste ed evitare di ripetere te stesso. Considera di usarli, ma non rendere il codice meno leggibile in questo modo. In VB.NET:

'before refactoring 
If x = 0 Then                    ' If-Then-Else puts emphasis on flow control
    label = "None"
Else
    label = Foo.getLabel(x)      '  If-Then-Else forces repeat of assignment line
End If

'after refactoring    
label = If(x = 0, "None", Foo.getLabel(x)) ' ternary If puts emphasis on assignment

Nota che " è meno leggibile " non è la stessa cosa di "non sono abituato a vederlo".

Non lo uso. Mi è sempre sembrato di provare a risparmiare spazio e digitare il codice sorgente con l'aspettativa che il codice sorgente compilato == più efficiente fosse più efficiente.

Non lo trovo affatto leggibile, ma gran parte di ciò è dovuto al fatto che non lo uso mai.

Tendo a non usare affatto l'operatore ternario come trovo se ... altrimenti molto più leggibile.

Imran, lo hai formattato magnificamente. Tuttavia, l'operatore ternario tende a diventare illeggibile quando nidificano più di due. un blocco if-else può darti un ulteriore livello di nidificazione comprensibile. Oltre a ciò, usa una funzione o una programmazione guidata dalla tabella.

$foo = (isset($bar)) ? $bar : 'default';

Lo uso personalmente solo per un'assegnazione di una variabile (in java), ad esempio:

String var = (obj == null) ? "not set" : obj.toString();

e (altro esempio) quando si utilizza una funzione che non consente parametri nulli come:

String val; [...]
int var = (val == null) ? 0 : Integer.parseInt(val);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top