Jadi ini lebih merupakan pertanyaan teoretis. C ++ dan bahasa (dalam) langsung berdasarkan itu (Java, C #, PHP) memiliki operator pintas untuk menetapkan hasil dari sebagian besar operator biner ke operan pertama, seperti
a += 3; // for a = a + 3
a *= 3; // for a = a * 3;
a <<= 3; // for a = a << 3;
tetapi ketika saya ingin beralih ekspresi boolean saya selalu menemukan diri saya menulis sesuatu seperti
a = !a;
yang menjadi menjengkelkan ketika aekspresi panjang seperti.
this.dataSource.trackedObject.currentValue.booleanFlag =
!this.dataSource.trackedObject.currentValue.booleanFlag;
(Ya, Hukum Demeter, saya tahu).
Jadi saya bertanya-tanya, apakah ada bahasa dengan operator toggle boolean unary yang akan memungkinkan saya untuk menyingkat a = !atanpa mengulangi ungkapan untuk a, misalnya
!=a;
// or
a!!;
Mari kita asumsikan bahwa bahasa kita memiliki tipe boolean yang tepat (seperti booldalam C ++) dan itu aadalah tipe itu (jadi tidak ada gaya-C int a = TRUE).
Jika Anda dapat menemukan sumber yang terdokumentasi, saya juga akan tertarik untuk mengetahui apakah mis. Perancang C ++ telah mempertimbangkan untuk menambahkan operator seperti itu ketika boolmenjadi tipe bawaan dan jika demikian, mengapa mereka memutuskan untuk tidak melakukannya.
(Catatan: Saya tahu bahwa beberapa orang berpendapat bahwa penugasan tidak boleh digunakan
=dan bahwa ++dan +=bukan operator yang berguna tetapi kelemahan desain; mari kita asumsikan saya senang dengan mereka dan fokus pada mengapa mereka tidak meluas ke bools).
this.dataSource.trackedObject.currentValue.booleanFlag ^= 1;
*= -1meskipun, yang karena alasan tertentu saya menemukan lebih intuitif daripada ^= true.
void Flip(bool& Flag) { Flag=!Flag; }, mempersingkat ekspresi panjang Anda.