Ich habe das vorher im Code gesehen, aber es vergessen. Im Grunde schaltet es eine boolesche Variable um. Wenn es wahr ist, wird es auf falsch gesetzt und umgekehrt. Habe aber leider die Syntax vergessen.
Es ist im Grunde ein One Liner dafür:
%Vor%Es ist ungefähr so, aber ich weiß nicht, wie es heißt oder wie es richtig heißt:
%Vor% myVar = myVar ? false : true;
verwendet den bedingten Operator .
Sie können das aber einfach tun
%Vor%Eine andere Option ist XOR:
%Vor%Es ist bemerkenswert, dass sich nur die LHS der Aufgabe ändert; Die rechte Seite ist konstant und schaltet jede boolesche Variable um. Negation ist jedoch mehr selbstdokumentierende IMO.
Was Sie denken, ist der bedingte Operator:
%Vor%(Wie Sie sehen, nennen viele Leute dies den "ternären Operator", aber das bedeutet nur, dass es ein Operator mit drei Operanden ist. Es gibt nur einen Operator mit drei Operanden in dieser Sprache, aber es sagt noch nichts über das, was der Operator tut.)
Es ist natürlich einfacher, den Negationsoperator zu verwenden:
%Vor%Worüber Sie sprechen, ist der "ternäre" oder "bedingte" Operator, der eine Inline-Substitution gemäß einer Bedingung ausführt.
Die Syntax lautet:
%Vor%Normalerweise gebe ich Klammern um meinen Zustand herum, manchmal um den ganzen Bedingungsoperator herum. Hängt davon ab, wie viel ich versuche, es von allem anderen abzugrenzen.
Nehmen Sie zum Beispiel an, dass Sie die größere von zwei Zahlen zurückgeben möchten:
%Vor%Beachten Sie, dass es in die Mitte von etwas anderem eingefügt werden kann.
Okay, lassen Sie uns jetzt Ihre eigentliche Frage zum Umschalten eines booleschen Typs angehen.
%Vor%ist, wie Sie es mit dem bedingten Operator tun würden. (Wiederum sind Klammern nicht erforderlich, ich bevorzuge sie einfach.)
Aber es gibt einen einfacheren Weg, um den booleschen ... mit dem logischen Operator NOT ("!") umzuschalten:
%Vor%Halte es einfach. : -)
Es gibt einen ternären Operator ( wikipedia ). Damit können Sie wie im zweiten Beispiel eine verdichtete if-else-Anweisung schreiben.
In Java:
%Vor%Es gibt auch den Operator NOT, der eine boolesche Variable umschaltet. In Java ist das! Ich glaube, das ist was du willst.
%Vor%Ich habe kürzlich (auf eigene Faust) eine ähnliche Antwort auf eine bereits hier angegebene gefunden. Die einfachste und kürzeste Antwort lautet jedoch:
%Vor%Dies funktioniert am besten in JavaScript, wenn Sie boolesche, DOM-basierte Attribute umschalten möchten (z. B. die deaktivierte Eigenschaft einer Formularsteuerung / -eingabe - von einem nicht bearbeitbaren in einen Bearbeitungszustand wechseln). Nach vielem Suchen (ohne Ergebnis, das mir gefiel) und etwas Versuch und Irrtum, fand ich meine Lösung am einfachsten (aber wahr statt 1 wäre klarer - wie es vorher gepostet wurde).
Da diese Syntax nicht sehr klar ist, würde ich sie nicht sehr oft empfehlen (ich glaube, es ist angemessen, wenn die Variable oder Eigenschaft den Kontext offensichtlich macht). Ich habe diese Antwort gepostet (anstatt sie zu kommentieren), weil der Kontext, in dem die XOR bitweise Selbstzuweisung verwendet werden sollte, sehr wichtig ist. Dieser "Trick" sollte meistens vermieden werden, wenn Best Practices berücksichtigt werden.
Wie andere bemerkt haben, gibt es zwei Möglichkeiten, etwas zu negieren: "lvalue =! lvalue;" und "lvalue ^ = 1;". Es ist wichtig, die Unterschiede zu erkennen.
Wenn "lvalue =! lvalue" angegeben wird, wird lvalue auf 1 gesetzt, wenn es Null war, und 0, wenn es auf anderes gesetzt war . Der Lvalue wird zweimal ausgewertet; Dies ist kein Faktor für einfache Variablen, aber "someArray [index1] [index2] [index3] [index4] =! someArray [index1] [index2] [index3] [index4]" könnte die Dinge verlangsamen.
Sagen "Lvalue ^ = 1;" Lvalue wird auf 1 gesetzt, wenn es 0 war, 0, wenn es 1 war, und etwas anderes, wenn es weder Null noch 1 war. Der Lvalue muss nur einmal spezifiziert oder ausgewertet werden, und wenn der Wert als Null bekannt ist oder 1, diese Form ist wahrscheinlich schneller.
Schade, dass es keinen auto-negate-Operator gibt; Es gibt Zeiten, in denen so etwas praktisch wäre.