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