C'est donc plus une question théorique. C ++ et les langages (in) directement basés sur celui-ci (Java, C #, PHP) ont des opérateurs de raccourcis pour affecter le résultat de la plupart des opérateurs binaires au premier opérande, comme
a += 3; // for a = a + 3
a *= 3; // for a = a * 3;
a <<= 3; // for a = a << 3;
mais quand je veux basculer une expression booléenne, je me surprends toujours à écrire quelque chose comme
a = !a;
ce qui devient ennuyeux quand a
est une longue expression comme.
this.dataSource.trackedObject.currentValue.booleanFlag =
!this.dataSource.trackedObject.currentValue.booleanFlag;
(ouais, la loi de Demeter, je sais).
Je me demandais donc s'il existe un langage avec un opérateur de bascule booléen unaire qui me permettrait d'abréger a = !a
sans répéter l'expression pour a
, par exemple
!=a;
// or
a!!;
Supposons que notre langage ait un type booléen approprié (comme bool
en C ++) et qu'il a
soit de ce type (donc pas de style C int a = TRUE
).
Si vous pouvez trouver une source documentée, je serais également intéressé de savoir si, par exemple, les concepteurs C ++ ont envisagé d'ajouter un opérateur comme celui-ci lorsqu'il bool
est devenu un type intégré et si oui, pourquoi ils ont décidé de ne pas le faire.
(Note: Je sais que certaines personnes sont d'avis que la cession ne devrait pas utiliser
=
et que ++
et +=
ne sont pas opérateurs utiles , mais des défauts de conception, Assumons que je suis heureux avec eux et se concentrer sur la raison pour laquelle ils ne seraient pas étendre à bools).
this.dataSource.trackedObject.currentValue.booleanFlag ^= 1;
*= -1
cependant, ce qui, pour une raison quelconque, je trouve plus intuitif que ^= true
.
void Flip(bool& Flag) { Flag=!Flag; }
Le raccourcit votre expression longue.