Das ist also eher eine theoretische Frage. C ++ und direkt darauf basierende Sprachen (in) (Java, C #, PHP) verfügen über Verknüpfungsoperatoren , mit denen das Ergebnis der meisten Binäroperatoren dem ersten Operanden zugewiesen werden kann, z
a += 3; // for a = a + 3
a *= 3; // for a = a * 3;
a <<= 3; // for a = a << 3;
Aber wenn ich einen booleschen Ausdruck umschalten möchte, schreibe ich immer so etwas
a = !a;
was nervt wenn a
ein langer ausdruck ist wie.
this.dataSource.trackedObject.currentValue.booleanFlag =
!this.dataSource.trackedObject.currentValue.booleanFlag;
(Ja, Demeters Gesetz, ich weiß).
Also ich frage mich, ist es eine Sprache mit einem unären boolean Toggle Operator , der mich abzukürzen erlauben würde , a = !a
ohne Wiederholung der Ausdruck für a
, zum Beispiel
!=a;
// or
a!!;
Nehmen wir an, dass unsere Sprache einen richtigen booleschen Typ hat (wie bool
in C ++) und dass a
dieser vom Typ ist (also kein C-Stil int a = TRUE
).
Wenn Sie eine dokumentierte Quelle finden, würde mich auch interessieren, ob beispielsweise die C ++ - Designer erwogen haben, einen solchen Operator hinzuzufügen, als er bool
zu einem integrierten Typ wurde, und wenn ja, warum sie sich dagegen entschieden haben.
(Anmerkung: Ich weiß , dass einige Leute der Meinung sind , dass Zuordnung nicht verwenden sollten
, =
und dass ++
und +=
sind nicht nützlich Betreiber aber Design - Fehler, lassen Sie uns einfach davon ausgehen , ich bin glücklich mit ihnen und konzentrieren sich auf , warum sie bools nicht verlängern würde).
this.dataSource.trackedObject.currentValue.booleanFlag ^= 1;
*= -1
aber, was ich aus irgendeinem Grund intuitiver finde als ^= true
.
void Flip(bool& Flag) { Flag=!Flag; }
Die verkürzt Ihren langen Ausdruck.