Um ternär oder nicht ternär?
Ich persönlich bin ein Verfechter der ternäre operator: () ? : ; Mir ist klar, dass es seinen Platz hat, aber ich habe über viele Programmierer, die komplett dagegen sind, jemals verwenden Sie es, und einige verwenden es auch oft.
Was sind Ihre Gefühle auf? Welche interessanten code haben Sie gesehen, es zu benutzen?
InformationsquelleAutor der Frage |
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie es für einfache Ausdrücke nur:
Nicht Kette oder ein nest ternäre Operatoren wie es schwer zu Lesen und verwirrend:
Zudem, bei Verwendung ternärer operator, betrachten formatieren Sie den code in einer Weise, die die Lesbarkeit verbessern:
InformationsquelleAutor der Antwort
Es ist das Debuggen etwas schwieriger, da kann man nicht platzieren Sie Haltepunkte auf jeder der sub-Ausdrücke. Ich benutze es nur selten.
InformationsquelleAutor der Antwort
Ich Liebe Sie, vor allem in den Typ-sichere Sprachen.
Ich sehe nicht, wie dieser:
ist schwerer als das:
Bearbeiten -
Ich würde argumentieren, dass ternäre Operatoren machen alles weniger Komplex und mehr ordentlich, als die alternative.
InformationsquelleAutor der Antwort Ian P
Gefesselt ich bin fein mit geschachtelten, nicht so viel.
Ich Neige dazu, verwenden Sie mehr in C einfach b/c sind Sie eine if-Anweisung, die einen Wert hat, so ist es verkürzt sich auf die unnötige Wiederholung oder Variablen:
eher als
In Aufgaben wie dieser, finde ich es weniger zu überarbeiten und klarer.
Wenn ich arbeiten bin in ruby auf der anderen Seite, bin ich eher zu
if...else...end
weil es einen Ausdruck zu.(obwohl, zugegeben, für etwas das einfach, ich könnte nur die Verwendung der ternären operator sowieso).
InformationsquelleAutor der Antwort
Ternären
?:
Betreiber ist lediglich ein funktionales äquivalent des prozeduralenif
konstruieren. So lange, wie Sie nicht mit verschachtelten?:
Ausdrücke, die Argumente für/gegen die funktionale Darstellung jeder operation gilt auch hier. Aber nisten ternäre Operationen führen kann, code, ist geradezu verwirrend (übung für den Leser: schreiben Sie einen parser, der für das verschachtelte ternäre Bedingungen und Sie werden schätzen Ihre Komplexität).Aber es gibt viele Situationen, in denen konservative Nutzung der
?:
Betreiber führen kann code, ist eigentlich einfacher zu Lesen als sonst. Zum Beispiel:Nun vergleichen Sie das mit diesem:
Wie der code ist kompakter, es gibt weniger syntaktische Rauschen, und durch die Verwendung der ternären operator mit bedacht (das ist nur in Zusammenhang mit der reverseOrder Eigenschaft) das Resultat ist nicht besonders knapp.
InformationsquelleAutor der Antwort
Es ist eine Frage des Stils, wirklich; das Unterbewusstsein Regeln, die ich neigen dazu, zu befolgen sind:
foo = (bar > baz) ? true : false
aber NICHTfoo = (bar > baz && lotto && someArray.Contains(someValue)) ? true : false
<%= (foo) ? "Yes" : "No" %>
Nur wirklich nutzen es für die Zuordnung; nie Ablauflogik (also nieFlow-Logik in ternären ist selbst eine Lüge, ignorieren Sie den letzten Punkt.(foo) ? FooIsTrue(foo) : FooIsALie(foo)
)Ich mag es, weil es prägnant und elegant, für einfache Zuordnung von Operationen.
InformationsquelleAutor der Antwort
Wie so viele Meinung Fragen, die Antwort ist zwangsläufig: es hängt
Etwas wie:
Ich denke, das ist viel präziser (und schneller für mich zu analysieren) als:
Nun, wenn Ihr bedingten Ausdruck Komplex ist, dann ist die ternäre operation ist nicht eine gute Wahl. So etwas wie:
ist nicht ein guter Kandidat für den ternären operator.
Als beiseite, wenn du ein C-Programmierer, GCC eigentlich hat eine Erweiterung , können Sie ausschließen, dass der if-true Teil der ternären, wie diese:
Wird
x
zuy
vorausgesetzty
ist nichtNULL
. Gutes Zeug.InformationsquelleAutor der Antwort Sean Bright
In meinem Kopf, es macht nur Sinn, den ternären operator in Fällen, wo ein Ausdruck erforderlich ist.
In anderen Fällen, wie es scheint, der ternäre operator verringert die Klarheit.
InformationsquelleAutor der Antwort
Durch das Maß der zyklomatische Komplexitätdie Verwendung von
if
Aussagen oder der ternäre operator gleichwertig sind. Also mit dieser Maßnahme, die Antwort ist keinedie Komplexität wäre genau das gleiche wie vorher.Durch andere Maßnahmen, wie Lesbarkeit, Wartbarkeit und DRY (Don ' T-Repeat-Yourself), entweder Wahl kann besser beweisen als die anderen.
InformationsquelleAutor der Antwort Greg Hewgill
Ich benutze es ziemlich oft an Orten, wo ich bin gezwungen, an der Arbeit in einem Konstruktor - zum Beispiel der neue .NET 3.5 LINQ to XML-Konstrukte zu definieren, Standardwerte, wenn ein optionaler parameter ist null.
Erfundenes Beispiel:
oder (Dank asterite)
Egal, ob Sie die ternärer operator oder nicht, machen Sie sicher, dass Ihr code lesbar ist, ist das wichtigste. Jedem Konstrukt werden kann, unlesbar gemacht werden.
InformationsquelleAutor der Antwort
Ich den ternären operator, wo immer ich kann, es sei denn, es macht den code extrem schwer zu Lesen, aber das ist dann in der Regel nur ein Hinweis, dass mein code könnte ein wenig refactoring.
Es immer verwirrt mich, wie einige Leute denken, dass der ternäre operator ist ein "hidden" feature auf sich oder ist etwas geheimnisvoll. Es ist eines der ersten Dinge, die ich gelernt, wenn ich anfange in C Programmieren, und ich glaube nicht, dass es vermindert die Lesbarkeit überhaupt. Es ist ein natürlicher Teil der Sprache.
InformationsquelleAutor der Antwort
Ich Stimme mit jmulder: es sollte nicht verwendet werden, anstelle einer
if
aber es hat seinen Platz für die Rückkehr Ausdruck, oder die innerhalb eines Ausdrucks:Ersteres ist nur ein Beispiel, eine bessere i18n Unterstützung der plural verwendet werden sollte!
InformationsquelleAutor der Antwort
Wenn Sie mit dem ternären operator für eine einfache bedingte Zuweisung, die ich denke, es ist in Ordnung. Ich habe gesehen, dass es (ab)verwendet, um den Programmablauf Steuern, ohne selbst die eine Aufgabe, und ich denke, dass sollte vermieden werden. Verwenden Sie eine if-Anweisung in diesen Fällen.
InformationsquelleAutor der Antwort Bill the Lizard
(Hack des Tages)
Dann kann man if-then-else-Ausdruck:
InformationsquelleAutor der Antwort
Ich denke, dass der ternäre operator sollte benutzt werden, wenn Sie benötigt wird. Es ist natürlich eine sehr subjektive Auswahl, aber ich finde, dass ein einfacher Ausdruck (speziell als return-Ausdruck) ist viel übersichtlicher als ein vollständiger test. Beispiel in C/C++:
Gegenüber:
Haben Sie auch den Fall, wo die Lösung liegt zwischen den ternären operator, und der Erstellung einer Funktion. Zum Beispiel in Python:
Die alternative ist:
Ist es nötig genug, dass in Python (als Beispiel), wie ein idiom betrachtet werden konnten regelmäßig:
diese Linie nutzt die Eigenschaften der logischen Operatoren in Python: Sie sind faul und gibt den letzten Wert geschätzt, wenn Sie gleich der Endstand.
InformationsquelleAutor der Antwort
Ich mag 'em. Ich weiß nicht, warum, aber ich fühle mich sehr cool, wenn ich den ternären Ausdruck.
InformationsquelleAutor der Antwort JimDaniel
Ich habe gesehen, wie Tiere, wie (es war eigentlich viel schlimmer, da war es isValidDate und überprüft, Monat und Tag als gut, aber ich konnte nicht belästigt werden, die versuchen zu erinnern, die ganze Sache):
wo, einfach eine Reihe von if-Anweisungen besser gewesen wäre (obwohl dies immer noch besser als die makro-version, den ich einmal gesehen).
Ich bereue es überhaupt nicht für kleine Dinge wie:
oder sogar etwas knifflige Dinge wie:
InformationsquelleAutor der Antwort paxdiablo
Ich wie mit dem operator in den debug-code zu drucken, Fehler-Werte, so dass ich nicht haben, Sie zu betrachten die ganze Zeit. In der Regel Tue ich dies für debug-prints, die nicht Vorhaben zu bleiben, sobald ich fertig bin, zu entwickeln.
InformationsquelleAutor der Antwort
Ich fast nie verwenden Sie die ternärer operator, weil wenn ich es benutzen, es macht mich immer denken, viel mehr, als ich später, als ich versuchen, es zu halten.
Ich gerne vermeiden Ausführlichkeit, aber wenn es macht den code viel einfacher zu Holen, ich werde gehen, für die Ausführlichkeit.
Betrachten:
Nun, das ist ein bisschen verbose, aber ich finde es viel besser lesbar als:
oder:
Scheint es gerade zu komprimieren, zu viel information in zu wenig Raum, ohne dass es klar ist, was Los ist. Jedesmal, wenn ich sehe, ternärer operator, der verwendet wird, habe ich immer eine alternative gefunden, die schien viel einfacher zu Lesen,... dann wieder, das ist eine extrem subjektive Meinung, also, wenn Sie und Ihre Kollegen finden ternären sehr gut lesbar ist, gehen Sie für es.
InformationsquelleAutor der Antwort
Gut, die syntax für die ist es schrecklich. Ich finde funktionale ifs sehr nützlich, und oft macht den code besser lesbar.
Ich würde empfehlen, einen makro zu machen, mehr lesbar, aber ich bin sicher, dass jemand kommen kann, mit einem schrecklichen Grenzfall (wie es immer ist mit CPP).
InformationsquelleAutor der Antwort
Nur, wenn:
$var = (einfach > testen ? simple_result_1 : simple_result_2);
KUSS.
InformationsquelleAutor der Antwort
Ich in der Regel verwenden Sie in Dinge wie diese:
InformationsquelleAutor der Antwort
Als andere haben darauf hingewiesen, Sie sind schön für die kurzen, einfachen Bedingungen. Mir gefallen Sie besonders gut für Standardwerte (Art, wie die || und oder Verwendung in javascript und python), z.B.
Eine weitere gebräuchliche Anwendung ist die Initialisierung einer Referenz in C++. Da Referenzen werden deklariert und initialisiert, in derselben Anweisung können Sie nicht verwenden Sie eine if-Anweisung.
InformationsquelleAutor der Antwort maccullt
Ich behandle ternäre Operatoren wie eine Menge SPRINGEN. Sie haben Ihren Platz, aber Sie sind etwas, das Sie sollten in der Regel vermeiden, um den code leichter zu verstehen.
InformationsquelleAutor der Antwort
Vor kurzem sah ich eine variation auf ternäre Operatoren (naja, fast), dass der standard "() ? :" Variante zu sein scheinen, ein Ausbund an Klarheit:
oder, um ein greifbareres Beispiel:
Wohlgemerkt, das ist Javascript, also Dinge wie, dass kann nicht möglich sein in anderen Sprachen (zum Glück).
InformationsquelleAutor der Antwort
Zur einfachen wenn-Fälle, die ich mag, es zu benutzen. Eigentlich ist es viel einfacher zu Lesen/code beispielsweise als Parameter für Funktionen oder Dinge wie, dass. Auch um zu vermeiden, dass die neue Linie die ich mag zu halten mit alle meine if/else.
Neseting wäre es eine große NO-NO in meinem Buch.
So, fortsetzen, für einen einzigen if/else verwende ich den ternären operator. Für andere Fälle eine regelmäßige if/else if/else-Anweisung (oder switch)
InformationsquelleAutor der Antwort
Ich mag Groovy speziellen Fall von ternären operator, genannt die Elvis-operator: ?:
Dieser code wertet zu expr, wenn es nicht null ist, und der Standard, wenn es ist. Technisch ist es nicht wirklich ein ternärer operator, aber es ist definitiv im Zusammenhang mit it und spart eine Menge Zeit/Eingabe.
InformationsquelleAutor der Antwort
Für einfache Aufgaben wie das zuordnen von einem anderen Wert abhängig von einer Bedingung, Sie sind großartig. Ich würde Sie nicht benutzen, wenn es längere Ausdrücke je nach Bedingung tho.
InformationsquelleAutor der Antwort Svet
So viele Antworten gesagt haben, es hängt. Ich finde, dass wenn der ternären Vergleich ist nicht sichtbar in einem quick-scan unten der code, dann sollte es nicht verwendet werden.
Als eine Seite-Problem, ich könnte auch beachten, dass seine Existenz ist eigentlich ein bisschen ein anomoly aufgrund der Tatsache, dass in C, Vergleich Prüfung ist eine Aussage. In der Symbol -, der
if
Konstrukt (wie die meisten-Symbol) ist eigentlich ein Ausdruck. So können Sie Sachen wie tun:... das finde ich sehr viel besser lesbar als eine ternery Vergleichsoperator. 🙂
Gab es eine Diskussion vor kurzem über die Möglichkeit, die
?:
operator-Symbol, aber mehrere Leute, die richtig darauf hingewiesen, dass es absolut keine Notwendigkeit, wegen der Art, wieif
funktioniert.Was bedeutet, dass, wenn Sie tun könnte, dass in C (oder einer der anderen Sprachen, die den ternery-operator), dann würden Sie nicht, in der Tat, müssen die ternery Betreiber an alle.
InformationsquelleAutor der Antwort staticsan
Wenn Sie und Ihre Kollegen verstehen, was Sie tun, und Sie sind nicht in massiven Gruppen ich glaube, Sie machen den code weniger Komplex und leichter zu Lesen, weil es einfach weniger code.
Die einzige Zeit, die ich denke, ternäre Operatoren code schwerer zu verstehen ist, wenn man mehr als 3 oder 4 in einer Linie. Die meisten Menschen nicht denken Sie daran, dass Sie Recht hat Vorrang, und wenn ein Stapel von Ihnen, es macht das Lesen den code ein Alptraum.
InformationsquelleAutor der Antwort Alex