Wie Sie wenn, sonst, wenn die Logik in einem ternären operator?
War ich nur Fragen, wenn dies möglich war, denn ich begann mit ternären Operatoren zu reduzieren Zeilen code, und ich Liebe es.
if (x==y)
{
z += x;
} else if (x==z)
{
z += y;
} else {
z += 1;
}
kann ich dies jetzt zu tun, wenn es nur eine if-Anweisung wie dieser:
z = x == y ? z += x : z += 1;
"ich begann mit ternären Operatoren zu reduzieren Zeilen code, und ich bin es liebevoll" Uh oh.
Auch wenn es nur eine einzelne Anweisung, können Sie entfernen von Klammern. Und es ist besser lesbar als die ternären. Imo
Statt nur zu sagen, dass, können Sie erklären, warum das schlecht ist? Ich bin immer bereit zuzuhören.
Sie müssen vorsichtig sein, mit dem ternären operator. Nicht einfach, weil es cool aussehende oder einfach nur, um zu verringern Linien des Codes. Wie Maresh sagte, wenn Sie wirklich wollen, um zu verringern Linien des Codes können Sie starten, indem die Klammern. Sie nicht brauchen, um squeeze-alles in einer einzigen Zeile. Der Anwendungsfall, die Sie gegeben haben, hier ist einer, wo Sie sollten uns wirklich bemühen, es nicht zu verwenden, obwohl man theoretisch kann.
Ah ich sehe, thx
Auch wenn es nur eine einzelne Anweisung, können Sie entfernen von Klammern. Und es ist besser lesbar als die ternären. Imo
Statt nur zu sagen, dass, können Sie erklären, warum das schlecht ist? Ich bin immer bereit zuzuhören.
Sie müssen vorsichtig sein, mit dem ternären operator. Nicht einfach, weil es cool aussehende oder einfach nur, um zu verringern Linien des Codes. Wie Maresh sagte, wenn Sie wirklich wollen, um zu verringern Linien des Codes können Sie starten, indem die Klammern. Sie nicht brauchen, um squeeze-alles in einer einzigen Zeile. Der Anwendungsfall, die Sie gegeben haben, hier ist einer, wo Sie sollten uns wirklich bemühen, es nicht zu verwenden, obwohl man theoretisch kann.
Ah ich sehe, thx
InformationsquelleAutor some_bloody_fool | 2012-07-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wäre es so:
Wenn Sie
z += x
als operand wird es am Ende tunz = (z += x)
. Während es funktioniert, in diesem speziellen Fall, da das Ergebnis des Ausdrucksz += x
ist der Letzte Wert derz
, es kann nicht funktionieren, in den anderen Fällen.Howver, wie alle Operationen haben die
z +=
gemeinsam, Sie können tun Sie dies:Verwenden Sie mit Vorsicht, wenn. Der code ist oft besser lesbar und wartbar je einfacher es ist, und geschachtelte bedingte Operationen sind nicht sehr gut lesbar ist. Auch, verwenden Sie diese nur, wenn Sie haben eine Ausdruck als das Ergebnis der bedingten Vorgang, es ist kein drop-in Ersatz für die
if
- Anweisung.InformationsquelleAutor Guffa
Können Sie
Aber ehrlich gesagt, das ist nicht wirklich besser lesbar als das, was Sie vor hatte. Sie können machen es etwas klarer durch hinzufügen von Klammern:
Aber generell würde ich bleiben Sie Weg von geschachtelten bedingten Operatoren es sei denn, bei einer Runde Golf.
Mit etwas vernünftigem newlines, ich glaube, das könnte more lesbar als das original.
Michael: Einverstanden; es wurde ein Hinweis Hinzugefügt, dass für. rekursiv: ich habe gerade versucht eine Formatierung über mehrere Zeilen, scheiterte aber, so dass es mehr nachvollziehbar. Vielleicht habe ich einfach saugen. Aber vielleicht komplexe bedingte Operatoren sind schwer zu format für die Lesbarkeit.
Guffa hat die gleiche Idee, die ich habe. Zu mir, seine Lösung scheint ziemlich gut lesbar.
Ja, habe ich nicht bekommen, seine Idee für die Formatierung und ich Stimme zu.
InformationsquelleAutor Joey
Vier Zeilen code, und die meisten lesbar, IMO. Keine Notwendigkeit für ein ternärer operator hier:
Wenn ich hatte, es zu schreiben, Verwendung von ternären, die ich tun würde:
Was ist der Unterschied?
Burlaczenko: Es wird in genau der gleichen Weise, obwohl. Kein Punkt der Entscheidung, ob Sie
x
odery
wenn beide die gleiche, und wenn Sie nicht dann Sie hinzufügeny
trotzdem.So weit meine Tests geht, ist es.
Ja, es ist eigentlich das gleiche wie das original, wenn x == y, z += x ist die z - + = y -. Allerdings bin ich mir ziemlich sicher, dass es nur ein Beispiel, und die Verwendung der conditonal Betreiber ist die eigentliche Frage.
InformationsquelleAutor RedFilter
sollten Sie dies tun, indem Sie Klammern verwenden, wie diese:
InformationsquelleAutor Soroosh Bateni
Drehen Sie die
z
Berechnung in einer Zeile, ich würde so etwas tun:Dann:
Mehr lesbar, und wenn die Namensgebung ist gut und die Methode hat unit-test-coverage, sogar noch besser.
Ja ich bin mir dessen bewusst. Ich war mit eine andere Art und Weise zu komprimieren, eine bedingte in eine einzige Zeile. Viele andere Antworten zeigt das Diagramm (und wie entsetzlich es endet auf der Suche).
InformationsquelleAutor Adam Houldsworth
Ist das einfach weiterhin mit einem ternären operator statt if -, else if-Bedingung, müssen nur weiterhin das gleiche auch nach dem ":". unten ist die Probe.
Referenz Beispiel
InformationsquelleAutor Lawrine