Quindi questa è più una domanda teorica. C ++ e linguaggi (in) direttamente basati su di esso (Java, C #, PHP) hanno operatori di scelta rapida per assegnare il risultato della maggior parte degli operatori binari al primo operando, come
a += 3; // for a = a + 3
a *= 3; // for a = a * 3;
a <<= 3; // for a = a << 3;
ma quando voglio attivare un'espressione booleana mi trovo sempre a scrivere qualcosa del genere
a = !a;
che diventa fastidioso quando a
è una lunga espressione come.
this.dataSource.trackedObject.currentValue.booleanFlag =
!this.dataSource.trackedObject.currentValue.booleanFlag;
(sì, la legge di Demetra, lo so).
Quindi mi chiedevo, c'è qualche lingua con un operatore toggle booleano unario che mi permetterebbe di abbreviare a = !a
senza ripetere l'espressione per a
, ad esempio
!=a;
// or
a!!;
Supponiamo che il nostro linguaggio abbia un tipo booleano appropriato (come bool
in C ++) e che a
sia di quel tipo (quindi non in stile C int a = TRUE
).
Se riesci a trovare una fonte documentata, sarei anche interessato a sapere se, ad esempio, i progettisti di C ++ hanno preso in considerazione l'aggiunta di un operatore del genere quando è bool
diventato un tipo incorporato e, in tal caso, perché hanno deciso di non farlo.
(Nota: So che alcune persone sono del parere che l'assegnazione non deve usare
=
e che ++
e +=
non sono utili, ma gli operatori difetti di progettazione; diciamo solo supporre sono felice con loro e concentrarsi sul perché essi non estendere a Caccio).
this.dataSource.trackedObject.currentValue.booleanFlag ^= 1;
*= -1
però, che per qualche motivo trovo più intuitivo di ^= true
.
void Flip(bool& Flag) { Flag=!Flag; }
Accorcia la tua lunga espressione.