यह शायद एक छोटी सी बात है, लेकिन मैं सोच रहा था क्यों पर्ल के तार्किक ऑपरेटरों (&&
, ||
, और !
) आसानी से समझ में "अंग्रेजी" तार्किक ऑपरेटरों (and
, or
और not
) से प्राथमिकता दी जाती। क्या पूर्व सेट का उपयोग करने और किसी स्क्रिप्ट में बाद वाले सेट का उपयोग करने का कोई नुकसान है?पर्ल के लॉजिकल ऑपरेटर &&, ||, क्यों! प्राथमिकता लें और, या, और नहीं?
उत्तर
तो ||
और or
ही पूर्वता, तो था
return some_func($test1) || $test2;
बजाय
return some_func($test1 || $test2);
या
मतलब होगामतलब होगा
some_func($test1 or die);
some_func($test1) or die;
के बजाय उन परिवर्तनों का न तो वांछित हैं।
और जब कोई or
पर बहस कर सकता है तो ||
से अधिक आसानी से समझा जा सकता है, इसे पढ़ना मुश्किल है। जब ऑपरेटर अपने ऑपरेटरों की तरह नहीं दिखते हैं तो कोड को पढ़ना आसान होता है।
मूल &&
, ||
और !
ऑपरेटरों को सी भाषा से मेल खाने के लिए उच्च प्राथमिकता है।
नया (लेकिन अभी भी पुराना) and
, or
और not
ऑपरेटरों को कुछ सामान्य संरचनाओं को सरल बनाने के लिए जोड़ा गया था। उदाहरण के लिए, तुलना करें:
open my $fh, '<', $filename || die "A horrible death!";
open my $fh, '<', $filename or die "A horrible death!";
इनमें से पहला गलत है; उच्च प्राथमिकता ||
$filename
और die
के साथ बांधता है जो आप नहीं चाहते हैं। दूसरा सही है; कम प्राथमिकता or
का अर्थ है कि गायब कोष्ठक अस्पष्टता का कारण नहीं बनते हैं।
return some_func $test1 || $test2;
+1 क्योंकि यह वास्तविक कारण है लैरी वॉल * प्रोग्रामिंग पर्ल * में देता है। –
एक जवाब के लिए टिप्पणी परिवर्तित:
यदि इन ऑपरेटरों वरीयता में समान थे, यह दोनों संस्करणों रखने के लिए आवश्यक नहीं होगा - केवल एक संस्करण होने पर्याप्त होगा।
लेकिन लैरी वॉल एक भाषाविद है, और वह वास्तव में अपनी नई भाषा में सादे अंग्रेजी शब्दों का उपयोग करना पसंद करता था। इसलिए, उन्होंने इन अंग्रेजी शैली के ऑपरेटरों (unless
और अन्य के साथ) पेश किए।
सी-स्टाइल ऑपरेटरों और उनके क्लासिक अर्थ को रखने के लिए, उन्हें नए कीवर्ड को अनावश्यक बनाने की आवश्यकता नहीं थी। इस वजह से उन्होंने इन ऑपरेटरों को थोड़ा अलग अर्थ दिया कि उन्हें बेहतर पसंद आया। तो यह अंतर ऑपरेटर प्राथमिकता के रूप में सामने आया।
यह सच नहीं है: लैरी के अंग्रेजी शब्दों के लिए पूर्वाग्रह से कोई लेना देना नहीं है। 'और' और 'या' को 'बाध्यकारी प्राथमिकता वाले समान ऑपरेटरों को प्रदान करने के लिए '&&' और' || 'के अतिरिक्त शामिल किया गया था। वे पर्ल में विशेष रूप से उपयोगी होते हैं क्योंकि फ़ंक्शन कॉल को पैरामीटर के चारों ओर कोष्ठक की आवश्यकता नहीं होती है। – Borodin
क्या मैंने यह नहीं कहा है? यदि वे प्राथमिकता में समान थे, तो 'और' और 'या' आज मौजूद नहीं होंगे। और अंग्रेजी-शैली की संरचना निश्चित रूप से अधिक लचीलापन प्रदान करती है, मैं विवाद नहीं कर रहा हूं कि – mvp
नहीं, यह नहीं है कि आपने जो कहा है। * "[लैरी वॉल] को वास्तव में अपनी नई भाषा में सादे अंग्रेजी शब्दों का उपयोग करना पसंद आया। इसलिए, उन्होंने इन अंग्रेजी-स्टाइल ऑपरेटरों को पेश किया ... उन्हें नए कीवर्ड को अनावश्यक नहीं करने की आवश्यकता थी [इसलिए \] उन्होंने इनके लिए थोड़ा अलग अर्थ दिया ऑपरेटरों को वह बेहतर पसंद आया। "* परी कथा बकवास है। – Borodin
- 1. पायथन का लॉजिकल ऑपरेटर और
- 2. एसक्यूएल और लॉजिकल ऑपरेटर और नल चेक
- 3. ऑपरेटर ओवरलोडिंग और प्राथमिकता
- 4. डबल लॉजिकल नहीं (!!) ऑपरेटर
- 5. ऑपरेटर प्राथमिकता:! और इंतजार
- 6. हास्केल प्राथमिकता: लैम्ब्डा और ऑपरेटर
- 7. लॉजिकल ऑपरेटर और PHP नियमित अभिव्यक्ति
- 8. पायथन में "और" और "या" ऑपरेटर क्यों नहीं हैं?
- 9. सी ++ लॉजिकल OR (||) ऑपरेटर
- 10. तुलना ऑपरेटर और 'है' - पाइथन में ऑपरेटर प्राथमिकता?
- 11. (स्पष्ट शामिल) ऑपरेटर और कन्स्ट्रक्टर रूपांतरण के साथ प्राथमिकता
- 12. ऑपरेटर प्राथमिकता नियमों के साथ पर्ल 6 व्याकरण का उदाहरण
- 13. सी # में कोई || = या && = ऑपरेटर क्यों नहीं हैं?
- 14. सूची ऑपरेटर पूर्वता पर्ल
- 15. क्यों कई भाषाओं में लॉजिकल एक्सओआर ऑपरेटर की कमी है?
- 16. PHP ऑपरेटर प्राथमिकता बग?
- 17. बूलियन ऑपरेटर प्राथमिकता
- 18. मैं एंड्रॉइड (लॉजिकल और ऑपरेटर) को ओवरराइड कैसे करूं?
- 19. लिंक क्वेरी 'और' 'या' ऑपरेटर
- 20. लॉजिकल कनेक्टिव्स और बूलियन कोक में अलग क्यों हैं?
- 21. मैं लॉजिकल या लॉजिकल के साथ और एक jQuery विशेषता चयनकर्ता के भीतर कैसे गठबंधन करूं?
- 22. सी # निरर्थक decimals और प्राथमिकता के साथ जोड़ ?? ऑपरेटर
- 23. एलिमेंट-वार लॉजिकल या पांडस
- 24. एकाधिक + और - ऑपरेटरों के लिए जावा प्राथमिकता
- 25. लॉजिकल और भौतिक कॉन्स्टेस के बीच अंतर
- 26. ऑपरेटर प्राथमिकता बदलें
- 27. लैम्ब्डा कैलकुस ऑपरेटर प्राथमिकता
- 28. एसक्यूएल "कम से कम या बराबर" और "0 से अधिक नहीं"
- 29. पायथन ऑपरेटर प्राथमिकता
- 30. एएनटीएलआर ऑपरेटर प्राथमिकता
क्योंकि लैरी वॉल इसे इस तरह पसंद आया? – mvp
यदि वे वरीयता में समान थे, तो दोनों संस्करणों को रखना आवश्यक नहीं होगा - केवल एक ही रखने के लिए पर्याप्त होगा। चूंकि लैरी एक भाषाविद है और अपनी नई भाषा में सादे अंग्रेजी शब्दों का उपयोग करना पसंद करता है, इसलिए उन्होंने इन्हें (बिना 'और' दूसरों के साथ) पेश किया। और निश्चित रूप से, उन्होंने इन शब्दों को अर्थ दिया कि उन्हें बेहतर पसंद आया (और सी-स्टाइल ऑपरेटरों से अभी भी अलग) – mvp