Jest to więc bardziej teoretyczne pytanie. C ++ i języki (in) bezpośrednio na nim oparte (Java, C #, PHP) mają operatory skrótów do przypisywania wyniku większości operatorów binarnych do pierwszego operandu, takie jak
a += 3; // for a = a + 3
a *= 3; // for a = a * 3;
a <<= 3; // for a = a << 3;
ale kiedy chcę zmienić wyrażenie boolowskie, zawsze piszę coś takiego
a = !a;
co staje się irytujące, gdy ajest to długie wyrażenie.
this.dataSource.trackedObject.currentValue.booleanFlag =
!this.dataSource.trackedObject.currentValue.booleanFlag;
(tak, prawo Demeter, wiem).
Zastanawiałem się więc, czy istnieje język z jednoargumentowym operatorem przełączania typu boolean , który pozwoliłby mi skrócić a = !abez powtarzania wyrażenia a, na przykład
!=a;
// or
a!!;
Załóżmy, że nasz język ma odpowiedni typ boolowski (jak boolw C ++) i to ajest tego typu (więc nie ma stylu C int a = TRUE).
Jeśli możesz znaleźć udokumentowane źródło, chciałbym się również dowiedzieć, czy np. Projektanci C ++ rozważali dodanie takiego operatora, kiedy boolstał się typem wbudowanym, a jeśli tak, to dlaczego zdecydowali się na nie.
(Uwaga: Wiem, że niektórzy ludzie są zdania, że zadanie nie należy używać
=i że ++i +=nie są użyteczne, ale operatorzy wady projektowe; niech tylko zakładać, że jestem zadowolony z nich i skupić się dlaczego oni nie rozciąga się bools).
this.dataSource.trackedObject.currentValue.booleanFlag ^= 1;
*= -1jednak, co z jakiegoś powodu wydaje mi się bardziej intuicyjne niż ^= true.
void Flip(bool& Flag) { Flag=!Flag; }Skraca twoje długie wyrażenie.