2013-03-04 6 views
11

यह शायद एक छोटी सी बात है, लेकिन मैं सोच रहा था क्यों पर्ल के तार्किक ऑपरेटरों (&&, ||, और !) आसानी से समझ में "अंग्रेजी" तार्किक ऑपरेटरों (and, or और not) से प्राथमिकता दी जाती। क्या पूर्व सेट का उपयोग करने और किसी स्क्रिप्ट में बाद वाले सेट का उपयोग करने का कोई नुकसान है?पर्ल के लॉजिकल ऑपरेटर &&, ||, क्यों! प्राथमिकता लें और, या, और नहीं?

+0

क्योंकि लैरी वॉल इसे इस तरह पसंद आया? – mvp

+1

यदि वे वरीयता में समान थे, तो दोनों संस्करणों को रखना आवश्यक नहीं होगा - केवल एक ही रखने के लिए पर्याप्त होगा। चूंकि लैरी एक भाषाविद है और अपनी नई भाषा में सादे अंग्रेजी शब्दों का उपयोग करना पसंद करता है, इसलिए उन्होंने इन्हें (बिना 'और' दूसरों के साथ) पेश किया। और निश्चित रूप से, उन्होंने इन शब्दों को अर्थ दिया कि उन्हें बेहतर पसंद आया (और सी-स्टाइल ऑपरेटरों से अभी भी अलग) – mvp

उत्तर

13

तो || और or ही पूर्वता, तो था

return some_func($test1) || $test2; 
बजाय

return some_func($test1 || $test2); 

या

मतलब होगा

मतलब होगा

some_func($test1 or die); 

some_func($test1) or die; 

के बजाय उन परिवर्तनों का न तो वांछित हैं।

और जब कोई or पर बहस कर सकता है तो || से अधिक आसानी से समझा जा सकता है, इसे पढ़ना मुश्किल है। जब ऑपरेटर अपने ऑपरेटरों की तरह नहीं दिखते हैं तो कोड को पढ़ना आसान होता है।

21

मूल &&, || और ! ऑपरेटरों को सी भाषा से मेल खाने के लिए उच्च प्राथमिकता है।

नया (लेकिन अभी भी पुराना) 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; 

+5

+1 क्योंकि यह वास्तविक कारण है लैरी वॉल * प्रोग्रामिंग पर्ल * में देता है। –

-3

एक जवाब के लिए टिप्पणी परिवर्तित:

यदि इन ऑपरेटरों वरीयता में समान थे, यह दोनों संस्करणों रखने के लिए आवश्यक नहीं होगा - केवल एक संस्करण होने पर्याप्त होगा।

लेकिन लैरी वॉल एक भाषाविद है, और वह वास्तव में अपनी नई भाषा में सादे अंग्रेजी शब्दों का उपयोग करना पसंद करता था। इसलिए, उन्होंने इन अंग्रेजी शैली के ऑपरेटरों (unless और अन्य के साथ) पेश किए।

सी-स्टाइल ऑपरेटरों और उनके क्लासिक अर्थ को रखने के लिए, उन्हें नए कीवर्ड को अनावश्यक बनाने की आवश्यकता नहीं थी। इस वजह से उन्होंने इन ऑपरेटरों को थोड़ा अलग अर्थ दिया कि उन्हें बेहतर पसंद आया। तो यह अंतर ऑपरेटर प्राथमिकता के रूप में सामने आया।

+0

यह सच नहीं है: लैरी के अंग्रेजी शब्दों के लिए पूर्वाग्रह से कोई लेना देना नहीं है। 'और' और 'या' को 'बाध्यकारी प्राथमिकता वाले समान ऑपरेटरों को प्रदान करने के लिए '&&' और' || 'के अतिरिक्त शामिल किया गया था। वे पर्ल में विशेष रूप से उपयोगी होते हैं क्योंकि फ़ंक्शन कॉल को पैरामीटर के चारों ओर कोष्ठक की आवश्यकता नहीं होती है। – Borodin

+0

क्या मैंने यह नहीं कहा है? यदि वे प्राथमिकता में समान थे, तो 'और' और 'या' आज मौजूद नहीं होंगे। और अंग्रेजी-शैली की संरचना निश्चित रूप से अधिक लचीलापन प्रदान करती है, मैं विवाद नहीं कर रहा हूं कि – mvp

+1

नहीं, यह नहीं है कि आपने जो कहा है। * "[लैरी वॉल] को वास्तव में अपनी नई भाषा में सादे अंग्रेजी शब्दों का उपयोग करना पसंद आया। इसलिए, उन्होंने इन अंग्रेजी-स्टाइल ऑपरेटरों को पेश किया ... उन्हें नए कीवर्ड को अनावश्यक नहीं करने की आवश्यकता थी [इसलिए \] उन्होंने इनके लिए थोड़ा अलग अर्थ दिया ऑपरेटरों को वह बेहतर पसंद आया। "* परी कथा बकवास है। – Borodin

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