तो यह एक सैद्धांतिक सवाल है। C ++ और भाषाएँ (इन) सीधे इस पर आधारित (Java, C #, 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;
(हाँ, Demeter कानून, मुझे पता है)।
इसलिए, मैं सोच रहा था, क्या एक गैर-बूलियन टॉगल ऑपरेटर के साथ कोई भाषा है जो मुझे उदाहरण के लिए a = !aअभिव्यक्ति को दोहराए बिना संक्षिप्त करने की अनुमति देगा।a
!=a;
// or
a!!;
मान लेते हैं कि हमारी भाषा का एक उचित बूलियन प्रकार है (जैसे boolC ++) और यह aउस प्रकार का है (इसलिए कोई C- शैली नहीं int a = TRUE)।
यदि आप एक प्रलेखित स्रोत पा सकते हैं, तो मुझे यह जानने में भी दिलचस्पी होगी कि क्या C ++ डिजाइनरों ने एक ऑपरेटर को जोड़ने पर विचार किया है जैसे कि boolएक अंतर्निहित प्रकार बन गया और यदि ऐसा है, तो उन्होंने इसके खिलाफ फैसला क्यों किया।
(नोट: मुझे पता है कि कुछ लोगों को राय है कि काम उपयोग नहीं करना चाहिए के हैं
=और कि ++और +=उपयोगी ऑपरेटरों लेकिन डिजाइन खामियां नहीं हैं, हम बस यह मान रहा है मैं क्यों वे bools का विस्तार नहीं होगा पर उन्हें और ध्यान देने के साथ खुश हूँ)।
this.dataSource.trackedObject.currentValue.booleanFlag ^= 1;
*= -1हालांकि, जो किसी कारण से मैं अधिक सहज ज्ञान युक्त है ^= true।
void Flip(bool& Flag) { Flag=!Flag; }आपकी लंबी अभिव्यक्ति को छोटा करता है।