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 aest 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 = !asans répéter l'expression pour a, par exemple
!=a;
// or
a!!;
Supposons que notre langage ait un type booléen approprié (comme boolen C ++) et qu'il asoit 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 boolest 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;
*= -1cependant, ce qui, pour une raison quelconque, je trouve plus intuitif que ^= true.
void Flip(bool& Flag) { Flag=!Flag; }Le raccourcit votre expression longue.