Так что это скорее теоретический вопрос. C++ и языки (in), основанные на нем (Java, С#, PHP), имеют операторы ярлыков для назначения результата большинства двоичных операторов первому операнду, например
a += 3; // for a = a + 3
a *= 3; // for a = a * 3;
a <<= 3; // for a = a << 3;
но когда я хочу переключить логическое выражение, я всегда нахожу, что пишу что-то вроде
a = !a;
который получает раздражает, когда длинное выражение как. a
this.dataSource.trackedObject.currentValue.booleanFlag =
!this.dataSource.trackedObject.currentValue.booleanFlag;
(Да, закон Деметры, я знаю).
Поэтому мне было интересно, есть ли какой-нибудь язык с унарным логическим оператором переключения, который позволит мне сокращать a = !a
A, не повторяя выражения для a
, например
!=a;
// or
a!!;
Предположим, что наш язык имеет правильный логический тип (например, bool
в C++) и что a
имеет такой тип (поэтому нет C-стиля int a = TRUE
).
Если вы можете найти документальный источник, мне также будет интересно узнать, рассмотрели ли, например, дизайнеры C++ добавление такого оператора, когда bool
стал встроенным типом, и если да, то почему они решили против него.
(Примечание: я знаю, что некоторые люди считают, что назначение не должно использовать =
и что ++
и +=
не являются полезными операторами, но создают недостатки, давайте просто предположим, что я доволен ими и сосредоточен на том, почему они не будут распространяться к bools).