2011-10-19 16 views
6

अधिकांश (लेकिन मुझे केवल एक छोटी संख्या पता है इसलिए चलिए उस बिंदु पर पिक्य नहीं मिलते हैं) उच्च स्तरीय भाषाएं कई अलग-अलग असाइनमेंट ऑपरेटर का समर्थन करती हैं।आधुनिक भाषा समर्थन + = लेकिन नहीं && =

a += 5; // increment a and assign result beack to a. 

लेकिन कोई नहीं (कि मैं (फिर से एक छोटी संख्या ध्यान दिया है)) & & = ऑपरेटर का समर्थन करने लगते हैं।
कारण मैं पूछ रहा हाल ही में इस देखा:

// simplified. 
bool x = false; 


x = x && testA(); // perform test A/B/C/D stop on first failure. 
x = x && testB(); 
x = x && testC(); 
x = x && testD(); 

और क्यों हम उपयोग नहीं कर सका मैं सोच रहा था:

x &&= testA(); // perform test A/B/C/D stop on first failure. 
x &&= testB(); 
x &&= testC(); 
x &&= testD(); 

कारण यह है कि & & = सी/सी में समर्थित नहीं है ++ जो हमने सोचा क्यों।

वहाँ एक तार्किक (कोई यमक इरादा) कारण है कि भाषा एक काम फार्म के साथ अन्य सभी प्रमुख ऑपरेटरों का समर्थन करता है, लेकिन नहीं & & = या है || =

मैं के खिलाफ एक तर्क के लिए एक अस्पष्ट याद है ये, लेकिन Google और SO खोज कठिन होती हैं जब आपकी खोज शब्द '& & =' और नतीजतन मुझे कुछ भी नहीं मिला।

+1

मैंने आज इस विचार को _exactly_ किया था, क्योंकि lua में, '&&' शब्द 'और' है, इसलिए मैंने सोचा कि उन्होंने '&& =' कैसे किया, और महसूस किया कि कोई भी & & = '' lua में नहीं है ज्यादातर भाषाएं –

उत्तर

1

&& और || अर्थ में विशेष वे कर रहे हैं कि कर रहे हैं, सबसे अधिक भाषाओं में, केवल निर्माण कि लघु सर्किटिंग मूल्यांकन प्रदान करते हैं तो यह एक तरह से समझ में आता है उन्हें सामान्य, गैर शॉर्ट सर्किट से अलग माना जाए, इसके लिए ऑपरेटरों जब यह संक्षिप्त रूपों की बात आती है। &&= शॉर्ट सर्किटिंग या भ्रम के भ्रम से बचने का सबसे आसान तरीका यह पहली जगह में शामिल नहीं है।

-1

आपको कभी इसकी आवश्यकता कब होगी? आम तौर पर, जब आप बुलियन ऑपरेशन करते हैं, तो आप मूल्य अपडेट नहीं कर रहे हैं, बल्कि एक बार के ऑपरेशन के लिए कुछ कंप्यूटिंग करते हैं। आपका उदाहरण बहुत यथार्थवादी नहीं है; ऐसे कई मामले नहीं हैं जिनमें आप वास्तव में ऐसा करेंगे।

इसके अलावा, सभी भाषाओं में जो मैं संवर्धित असाइनमेंट के बारे में सोच सकता हूं केवल बिटवाई और अंकगणितीय परिचालनों के लिए मौजूद है, कभी भी बुलियन ऑपरेशन नहीं।

+2

यह बहुत आसान है जब बाएं हाथ की तरफ बुलियन नहीं है, लेकिन * सच्चाई * है। –

2

पर्ल इसका समर्थन करता है। यह बहुत ही लिखने के लिए सक्षम होने के लिए उपयोगी है:

$x ||= $defaultX; 
+1

मैंने सोचा कि पर्ल दुनिया के हर ऑपरेटर और बाकी सब कुछ के हर संभव संयोजन का समर्थन करता है? –

+1

@Uwe: हाँ, यह [करता है] (http://www.ozonehouse.com/mark/periodic/) – hugomg

1

पहला कारण यह है कि भाषाओं आप "वर्बोज़" फ़ॉर्म का उपयोग कर अपने लक्ष्य तक पहुँचने के लिए अनुमति देते हैं। इसके बाद यह प्रत्येक असामान्य मामले के लिए ऑपरेटरों को जोड़ने पर फंस गया है। कारण यह है कि भाषा डिजाइनर को ऑपरेटर प्राथमिकताओं के बारे में बुद्धिमानी से निर्णय लेना है। यह उतना आसान नहीं है जितना दिखता है - सी को उदाहरण के रूप में ले जाएं जो &, |, && और || पर अंतर्ज्ञानी प्राथमिकताओं को गड़बड़ कर देता है।

दूसरा कारण यह है कि अधिकांश आधुनिक भाषाएं अपवादों के कुछ रूपों का समर्थन करती हैं। आपके मामले को अतिरिक्त बोनस के साथ अपवादों का उपयोग करके आसानी से लिखा जा सकता है, विफलता के बारे में जानकारी कॉलर को अधिक आसानी से पारित की जा सकती है।

इसलिए इस तरह के विशेष ऑपरेटर की आवश्यकता काफी छोटी है।

ओह, मुझे लगभग सबसे महत्वपूर्ण कारण याद आया: सी में उनके पास नहीं है। इसका क्या अर्थ है A Brief, Incomplete, and Mostly Wrong History of Programming Languages:

1 9 70 - निकलॉस विर्थ पास्कल, एक प्रक्रियात्मक भाषा बनाता है। आलोचकों तुरंत पास्कल को निंदा करते हैं क्योंकि यह अधिक परिचित सी-जैसे "x = x + y" के बजाय "x: = x + y" वाक्यविन्यास का उपयोग करता है। यह आलोचना इस तथ्य के बावजूद होती है कि सी का अभी तक आविष्कार नहीं हुआ है।

1 9 72 - डेनिस रिची ने एक शक्तिशाली बंदूक का आविष्कार किया जो आगे और पीछे एक साथ शूट करता है। की मौत की संख्या से संतुष्ट नहीं है और उस आविष्कार से स्थायी मैमिंग्स वह सी और यूनिक्स का आविष्कार करता है।

यह बस दिखाता है कि सी अभी भी एक आकर्षक है जिसे आप बच नहीं सकते हैं।

+0

मुझे अभी भी यह नहीं पता कि उस शीर्षक में "अधिकतर गलत" क्यों है। : पी – hugomg

+0

डाउनवोट (आर) के लिए कोई टिप्पणी? –

0

+ = और दोस्तों के विपरीत, & & = एक हार्डवेयर निर्देशों के लिए मानचित्र नहीं है। यह एक तरह का परीक्षण या स्पष्ट है।

संबंधित मुद्दे