Frage

Ich halte es in einzelnen Zeile, wenn es kurz ist. In letzter Zeit habe ich länger diese Art wurde mit oder verschachtelt ternärem Operator Ausdrücke. Ein konstruiertes Beispiel:

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

Persönlich, welche Art Sie verwenden, oder finden die meisten lesbar?

Edit: (auf wenn ternären-Operator verwenden)

Ich vermeide in der Regel mehr als zwei Ebenen tief ternären Operator. Ich neige dazu, 2 Ebene tief ternärer Operator über 2-Ebene bevorzugte if-else, wenn ich Variablen in PHP Template-Skripte Echo.

War es hilfreich?

Lösung

Der ternäre Operator ist in der Regel vermieden werden, aber diese Form kann gut lesbar sein:

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

Auf diese Weise den Zustand und das Ergebnis auf der gleichen Linie zusammengehalten, und es ist ziemlich einfach zu überfliegen nach unten und zu verstehen, was vor sich geht.

Andere Tipps

Ich versuche, nicht einen ternären Operator zu verwenden verschachtelte Bedingungen zu schreiben. Es trotzt Lesbarkeit und bietet keinen zusätzlichen Wert über eine bedingte verwendet wird.

Nur wenn es auf einer einzigen Zeile passen, und es ist kristallklar, was es bedeutet, ich benutze es:

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

Ich persönlich nur den ternären Operator verwenden, wenn es auf eine Zeile passt. Wenn es zu überbrücken muß, dann ist es Zeit für die guten alten

if else if else

eine Art I manchmal verwenden, die ich seit der Erziehung bin hat es nicht erwähnt wurde, ist wie folgt:

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

.. aber in der Regel nur dann, wenn sie alle auf einer Linie setzen macht es zu lang. Ich finde, dass die = ? : mit allen Line-up macht es übersichtlicher suchen.

PHP verschachtelt ternäre Operatoren verhalten sich anders.

Diese Syntax geht alle folgenden Tests. Basierend auf http://deadlytechnology.com/web-development-tips/php- ternäre-Syntax /

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

.

Siehe auch: http://au.php.net/ternary

Beispiel # 3 "Nicht offensichtlicher Ternary Behavior" erklärt, warum die folgend in PHP nicht funktioniert.

$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!

ternäre Operatoren sind kurze effektive Wege einfach, wenn Aussagen zu schreiben. Sie sollten nicht lesen verschachtelt oder schwierig werden. Denken Sie daran: Sie können die Software einmal schreiben, aber ist 100 mal gelesen. Es soll einfacher sein, als Schreib zu lesen.

Ich neige dazu, den Zustand Element in Klammern: (a == b)? 1: 0

Ich werde mit der gemeinsamen Meinung widersprechen. Ich bin ein bisschen wie Imran mit meinem Konditionaloperator Stil. Wenn es sauber auf eine Zeile passt, halte ich es auf einer Linie. Wenn es nicht sauber auf einer Zeile paßt, ich es brechen, aber ich benutze nur eine einzige Lasche (4 Räume, ich habe VS Satz Räume für Registerkarten einfügen) für den Einzug. Ich springe nicht sofort zu if-else, weil ein großer Teil der Zeit der bedingte Operator kontextuell mehr Sinn macht. (Wenn es Sinn, nicht kontextuell machen, aber ich einfach nicht verwenden.)

Auch ich nicht Nest bedingte Operatoren. An diesem Punkt finde ich es auch schwer zu lesen, und es ist Zeit, um den ausführlichere if-else Stil zu gehen.

Das „erfundene Beispiel“ ist, wie ich es einrücken würde, außer, dass ich vom linken Rande einrücken würde, nicht auf, wo das (oder was auch immer auf der Linie oben.

Um die ternären Verleumder - Lesbarkeit ist der Punkt. Wenn Sie nicht denken, es lesbaren Code macht, verwenden Sie es nicht. Aber ich finde das Gegenteil der Fall zumindest einen Teil der Zeit zu sein.

Der dreifach konditionalen kann Code sauberer und eleganter machen, und was am wichtigsten ist, helfen Sie Wert auf die richtigen Dinge setzen und zu vermeiden, sich zu wiederholen. Betrachten wir sie verwenden, aber nicht der Code machen weniger lesbar zu tun. 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

Beachten Sie, dass „es weniger lesbar ist“ ist nicht dasselbe wie „Ich bin zu sehen, dass nicht verwendet“.

ich verwende es nicht. Es ist immer zu mir riecht wie der Versuch, Raum und Typisierung im Quellcode mit der Erwartung zu speichern, dass kleine Quelle effizienter kompilierten Code ==.

Ich finde es überhaupt nicht lesbar, aber viel davon ist, weil ich es einfach nie verwenden.

Ich neige dazu, nicht den ternären Operator zu verwenden überhaupt wie ich, wenn .. sonst viel besser lesbar.

Imran, haben Sie dieses schön formatiert. Allerdings ist der ternäre Operator zu erhalten unlesbar wie Sie Nest neigt dazu, mehr als zwei. ein if-else-Block kann man ein zusätzliches Maß an nachvollziehbarer Verschachtelung geben. Darüber hinaus verwenden Sie eine Funktion oder tabellengesteuerte Programmierung.

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

ich nur persönlich benutzen es für eine Zuordnung einer Variablen (in Java), zum Beispiel:

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

und (anderes Beispiel) bei der Verwendung von Funktion, die nicht null Parameter erlaubt wie:

String val; [...]
int var = (val == null) ? 0 : Integer.parseInt(val);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top