Bu daha çok teorik bir soru. C ++ ve diller (in) doğrudan buna dayalı olarak (Java, C #, PHP) çoğu ikili işleçin sonucunu ilk işlenene atamak için kısayol işleçlerine sahiptir .
a += 3; // for a = a + 3
a *= 3; // for a = a * 3;
a <<= 3; // for a = a << 3;
ama boole ifadesini değiştirmek istediğimde kendimi hep böyle bir şey yazarken bulurum
a = !a;
Bu auzun bir ifade gibi olduğunda sinir bozucu olur .
this.dataSource.trackedObject.currentValue.booleanFlag =
!this.dataSource.trackedObject.currentValue.booleanFlag;
(evet, Demeter Yasası, biliyorum).
Merak ediyordum, tekdüze bir boole geçiş operatörüne sahip , örneğin a = !aifadeyi tekrar etmeden kısaltmamı sağlayacak herhangi bir dil var mı?a
!=a;
// or
a!!;
Diyelim ki dilimizin uygun bir boole türü var ( boolC ++ gibi ) ve abu türden (yani C stili yok int a = TRUE).
Belgelendirilmiş bir kaynak bulabilirseniz, örneğin C ++ tasarımcılarının boolyerleşik bir tür haline geldiğinde böyle bir operatör eklemeyi düşünüp düşünmediğini ve neden öyleyse buna karşı karar verdiklerini öğrenmek isterim .
(Not: Bazı insanlar atama kullanmaması gerektiğini görüşünde olduğunu biliyoruz
=ve o ++ve +=kullanışlı operatörler ama dizayn hataları değildir; let sadece onlar bool değerlerden oluşan kapsamaz neden onlarla ve odak mutluyum varsayalım ediyor).
this.dataSource.trackedObject.currentValue.booleanFlag ^= 1;
*= -1olsa da, bir nedenle daha sezgisel buluyorum ^= true.
void Flip(bool& Flag) { Flag=!Flag; }Uzun ifadenizi kısaltır.