Entonces esta es más una pregunta teórica. C ++ y los lenguajes (in) directamente basados en él (Java, C #, PHP) tienen operadores de acceso directo para asignar el resultado de la mayoría de los operadores binarios al primer operando, como
a += 3; // for a = a + 3
a *= 3; // for a = a * 3;
a <<= 3; // for a = a << 3;
pero cuando quiero alternar una expresión booleana siempre me encuentro escribiendo algo como
a = !a;
lo que se vuelve molesto cuando aes una expresión larga como.
this.dataSource.trackedObject.currentValue.booleanFlag =
!this.dataSource.trackedObject.currentValue.booleanFlag;
(Sí, la Ley de Demeter, lo sé).
Así que me preguntaba, ¿hay algún lenguaje con un operador de alternancia booleano unario que me permita abreviar a = !asin repetir la expresión para a, por ejemplo
!=a;
// or
a!!;
Supongamos que nuestro lenguaje tiene un tipo booleano adecuado (como boolen C ++) y que aes de ese tipo (por lo que no tiene estilo C int a = TRUE).
Si puede encontrar una fuente documentada, también me interesaría saber si, por ejemplo, los diseñadores de C ++ han considerado agregar un operador como ese cuando bool convirtió en un tipo incorporado y, de ser así, por qué decidieron no hacerlo.
(Nota: Sé que algunas personas son de la opinión de que la asignación no se debe usar
=y que ++y +=no son útiles, pero los operadores de defectos de diseño, vamos a asumir que estoy feliz con ellos y se centran en por qué no se extenderían a Bools).
this.dataSource.trackedObject.currentValue.booleanFlag ^= 1;
*= -1, sin embargo, que por alguna razón me parece más intuitivo que ^= true.
void Flip(bool& Flag) { Flag=!Flag; }Acorta tu expresión larga.