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 a
uzun 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 = !a
ifadeyi tekrar etmeden kısaltmamı sağlayacak herhangi bir dil var mı?a
!=a;
// or
a!!;
Diyelim ki dilimizin uygun bir boole türü var ( bool
C ++ gibi ) ve a
bu türden (yani C stili yok int a = TRUE
).
Belgelendirilmiş bir kaynak bulabilirseniz, örneğin C ++ tasarımcılarının bool
yerleş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;
*= -1
olsa da, bir nedenle daha sezgisel buluyorum ^= true
.
void Flip(bool& Flag) { Flag=!Flag; }
Uzun ifadenizi kısaltır.