Was ist klarer Form: if (! Wert) oder if (Flag == Wert)?
Ich verstehe, das ist eine subjektive Frage, so dass ich entschuldige mich, wenn es geschlossen werden muss, aber ich habe das Gefühl, es kommt oft genug für mich zu Fragen, ob es eine generelle Präferenz für eine form über die andere.
Offensichtlich die beste Antwort ist "umgestalten des Codes, so dass Sie nicht brauchen, um zu testen, Lüge", aber manchmal gibt es keine einfache Möglichkeit, dies zu tun und den "else" - Zweig ist einfach, um die Verarbeitung fortzusetzen. Also, wenn Sie müssen ein "wenn nicht "false" - Konstrukt ein, das ist der bevorzugte standard:
Den not-operator
if(!value)
Oder der test für falsche
if(value == false)
Kommentar zu dem Problem
Ein Vorteil der ersten ist, dass Sie nicht tun können, wenn (shouldLaunchMissiles = false)
Es tritt auf, dass dies eine subjektive Frage, vorausgesetzt, die community fühlt, die Antworten sind wertvoll und behalten möchte, könnte jemand dieses eine wiki-Frage? Ich habe nicht das Gefühl geben, wie jemand eine "Antwort" Kredit für diese Frage ist wirklich fair, denn es gibt keine absolut richtige Antwort.
Ich glaube nicht, dass die Prüfung für die Lüge ist ein problem. Ein größeres problem wäre, booleans, drückt eine negative Bedingung.
if (!gezündet)
ist viel deutlicher zu mir als if (unDetonated)
, zum Beispiel. @Jeffrey: Es wird noch schlimmer. Wie etwa
if (!unDetonated)
? Das würde mich pause beim Lesen der code sicher. @David Thornley - Genau! Das ist, wo Boolesche Werte der negativen Bedeutung, die unweigerlich dazu führen!
InformationsquelleAutor der Frage CodexArcanum | 2010-06-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
if(!value)
ist einfacher/schneller zu Folgen. Subjektiv, wie du gesagt hast. Solange Sie konsistent sind, das ist die Hauptsache.BEARBEITEN
Einem anderen Punkt hinzufügen - weglassen der true/false-keywords sollten auch (hoffentlich) zwingen den Programmierer zu verwenden, besser Variablen bezeichnet. Bool Variablen sollten immer angeben, Bedeutung oder Staatliche Zwecke, wie zum Beispiel:
if(MyWallet.IsEmpty)
Gibt es keinen Grund, mit den oben genannten zu verwenden
== false
oder== true
da es redundant ist. Das obige ist lesbarer sofort.Weit besser, als Sie zu entziffern:
if(MyWallet.EmptyStatus == true)
oder so etwas lächerliches wie diese.InformationsquelleAutor der Antwort KP.
Ich persönlich mag
if ((value == false) == true)
...Ursache dafür ist zu überprüfen, dass die Aussage
value is false
ist eigentlich bewerten, um einen booleschen wahr...und, dann, natürlich, die sowohl posssibilites bringt noch mehr Klarheit,
if ((value == false) == true && (value == false) != false)
<grin/>
und für diejenigen von Euch, die sind echte fresssäcke für Klarheit, und die Nachfrage eindeutigen Lesbarkeit, würde ich vorschlagen,
if (((value == false) == true && (value == false) != false) == true)
InformationsquelleAutor der Antwort Charles Bretana
Diese wird immer klarer, meiner Meinung nach.
Ich hasse es dies zu sagen, denn es klingt irgendwie bedeuten, aber dieser zeigt normalerweise, dass die person, die den code schreiben, verstehen nicht wirklich, die Nutzung von booleschen Werten. Sie nicht brauchen, um re-validieren, was ein boolean ist in einer if-Anweisung. Es ist redundant.
(Ich persönlich wäre genervt auf die person zu, wenn Sie die Namen der Variablen
value
statt etwas sinnvolles. Ich habe ein Gefühl, was du gepostet hast ist nur Pseudo-code, ich würde auf jeden Fall ding, dass auf eine überprüfung.)Bearbeiten (Reaktion auf einen Kommentar unten):
Blick trivial, aber oft ist es ein Zeichen von viel größere Dinge. Denn die meisten Menschen tun, verwenden Sie var == true etc. nicht verstehen. Es ist einfach eine Tatsache. Ich sage nicht, dass Ihr dumm oder Sie sollten nicht die Programmierer sondern nur, dass es wahrscheinlich etwas, das Sie brauchen, um zu überprüfen und lernen. Das problem ist, dass wenn die Logik wird sehr viel komplexer, nicht zu verstehen, Konzepte wie dieses kann dazu führen, zu viel viel größere Probleme die Straße hinunter. Einige Leute sagen, "es ist ein Stil." Das ist in Ordnung. Die wirkliche Frage in diesem Fall lautet: "warum ist es vorteilhaft für mich, es zu tun auf diese Weise? Was mache ich oder andere Leute von ihm bekommen?" Wenn Sie keine solide Antwort auf diese Frage, dann müssen Sie sich selbst Fragen "Warum ist das eine gute Idee?"
InformationsquelleAutor der Antwort kemiller2002
Ich würde nie Verwendung
if(value == true)
werden, so dass nur für die Konsistenz würde ich auch nicht verwendenif(value != false)
.InformationsquelleAutor der Antwort Bill the Lizard
if(!value)
ist klarer und mehr "elegant", speziell wenn Sie die Namen der booleschen Variablen korrektEtwas wie
scheint mir redundant
InformationsquelleAutor der Antwort Claudio Redi
Abweichende Meinung (Art der)
Aus einer Zusammenstellung Sicht, wirst du die gleiche IL, so ist es wirklich nur die Angelegenheiten, von der Lesbarkeit Sicht.
Aus dieser Sicht, die
if(value == false)
ist mehr offensichtlich, um ein casual-Leser, und es gibt weniger Chancen, die fehlt ! vor der bool.Ehrlich gesagt, ich benutze beide Ansätze, und die meisten Male, die ich es machen, verlassen Sie sich auf meine variable name. Wenn es klingt noch immer ok zu sagen "nicht" an die Stelle der "Knall", ich bin wahrscheinlich zu verwenden, die bang-notation
z.B.
InformationsquelleAutor der Antwort Robaticus
Benutze ich
Not value
beim Programmieren in VB aber in der Regel zu verwendenvalue == false
bei der Codierung in C#. Ich finde, dass das Ausrufezeichen kann manchmal verloren gehen in dem Namen der variable (z.B. !legal). Vielleicht ist es weil ich bin, äh, ein erfahrener veteran.InformationsquelleAutor der Antwort Rob Windsor
Ich glaube nicht, es ist alles so subjektiv. Ich habe nie gesehen empfiehlt es sich in der längeren form. Eigentlich alle Bücher-und coding-guides und "Wie man ein guter Programmierer" HowTos die ich gelesen habe, entmutigen.
Es fällt in die gleiche Kategorie wie
OTOH, alle hier gegebenen Antworten stellen meine erste Aussage ein bisschen gleich ist nicht wahr.
InformationsquelleAutor der Antwort Luc
Ich würde normalerweise lieber, wenn (!Wert) auch wenn ich weiß, für sicher, dass der Wert ein boolean. Aber viele Male, es kann ein string oder eine Zahl sein.
Die Anzahl null bewerten würde zu false in-Bedingungen in einer Menge von Sprachen, die (nicht alle, obwohl), aber die Zeichenfolge "0" bewerten würde zu wahr. Dies ist ein problem, vor allem in JavaScript, insbesondere wenn Sie empfangen von JSON-strings vom server, vor allem wenn die server in PHP geschrieben ist (da die meisten PHP-Entwickler sind unvorsichtig genug, um einfach die Werte aus der DB, und rufen die Funktionen json_encode auf Sie, nicht wissend, dass die DB Erträge strings und nicht die geringste Ahnung, dass all die Nullen und Einsen, die als boolean-Feldern kodiert werden als strings an das andere Ende, so werden alle behandelt, als wahr in den Bedingungen).
Rant über. Mein Vorschlag: ausdrücklich, insbesondere, wenn Ihre Sprache ist die "sehr dynamische" Art (z.B. JavaScript, PHP, Perl).
InformationsquelleAutor der Antwort mishoo
Was auch immer Sie bevorzugen. Wählen Sie eine und bleiben Sie dabei.
InformationsquelleAutor der Antwort IVlad
Ich wäre für die Verwendung
if(!value)
weil, je nachdem die Namen der Variablen, die "true" - Fall macht das viel mehr Sinn nach englischen Semantik.Sollten Sie eines der Beispiele in in diesem MSDN-Artikel:
liest in Englisch, "Wenn der Bereich markiert ist".
Jedoch, wenn(
pane.IsChecked == true
) liest in englischer Sprache als "Wenn, ob Bereich markiert ist, ist wahr". Diese Aussage, dass das deutlich weniger Englisch, als es sein sollte.Einer der Gründe, warum wir nicht mit dem schreiben von C# - code in Binär ist die Lesbarkeit. Wenn Sie die Wahl zwischen code, der fließt gut, wenn Sie es Lesen, und code, der nicht auf die Seite der einen, die mehr lesbar. Ich glaube nicht, dass das hinzufügen der "
== true
" macht dieses Beispiel besser lesbar und MSDN nicht glaube, also entweder.Zugegeben, dies ist ein eher kleines Beispiel zu befürchten. Aber wie einige von den anderen Antworten schon angedeutet, nicht die Anwendung dieser Art des Denkens zu größeren Fällen, die weh tun können, die Lesbarkeit zu verbessern.
InformationsquelleAutor der Antwort David
Ich zugunsten der
if (!value)
Stil zumindest für die Bewertung von Variablen oder Allgemeine Eigenschaften wiePage.IsPostback
und dergleichen. Für etwas komplexere tendiere ich zu parenthesise den Ausdruck so:Nur zu zeichnen, ein wenig mehr Aufmerksamkeit.
Alles in allem, es ist ein argument für Perl-Stil
unless
unduntil
keywords.InformationsquelleAutor der Antwort Quick Joe Smith
Ich bevorzuge die zweite option, die
if (value == false)
.Ich nehme gerne
if (~value)
oderif (not value)
in Sprachen, die es unterstützen, aber das!
nur verschmilzt waaaaay zu leicht entweder mit dem Namen der Variablen oder die Eröffnung Klammern oder | oder | | - Betreiber... zumindest meiner Meinung nach.Außerdem zwei Dinge:
if (value == true)
, und ich bin mir bewusst, ich bin inkonsequent. Und obwohl die Konsistenz ist sehr wichtig, meiner Meinung nach, die lästigen!
ist einfach nur schlecht.InformationsquelleAutor der Antwort Oak
Wenn die Bedingung ist nur ein check von einem einzelnen Wert, dann
!value
ist schneller.Jedoch, wenn die Bedingung enthält mehrere Wert überprüft, ich finde es viel einfacher zu Lesen
value == false
. Irgendwie ist es einfacher zu analysieren mehrere Prüfungen für die Gleichheit als mehrere Negationen Werte.InformationsquelleAutor der Antwort Corin
Tut mir Leid zu sagen, das zweite sieht einfach dumm von mir.
Ich würde hinzufügen eine zusätzliche Ebene, wenn jemand lieber:
🙂
InformationsquelleAutor der Antwort Pavel Radzivilovsky
Ich tatsächlich viele Formen möglich.
Dies ist eigentlich nicht wie es geschrieben wird, um standards, aber das ist, wie ich es sehe:
Daher sehe ich nicht == false überflüssig.
InformationsquelleAutor der Antwort Smar
Verwende ich if (Wert == false)
Die ! in if (!Wert) so klein ist, ich vermisse es.
InformationsquelleAutor der Antwort user1312568