पर्याप्त रूपांतरण करने के लिए काफी संभव है। वह स्थिति जहां आप मुसीबत में पड़ते हैं, जब आपको नहीं पता होता है कि किस तरह से कुछ काम करना चाहिए।
इसका एक उदाहरण जावास्क्रिप्ट में देखा जा सकता है जहां +
ऑपरेटर अलग-अलग समय पर अलग-अलग तरीकों से काम करता है।
>>> 4 + 3
7
>>> "4" + 3
43
>>> 4 + "3"
43
यदि कोई एक तर्क एक स्ट्रिंग है, तो +
ऑपरेटर एक स्ट्रिंग कॉन्सेटेशन है, अन्यथा यह अतिरिक्त है।
यदि आपको एक तर्क दिया जाता है और यह नहीं पता है कि यह एक स्ट्रिंग या पूर्णांक है, और इसके साथ जोड़ना चाहते हैं, तो यह थोड़ा गड़बड़ हो सकता है।
इससे निपटने का एक और तरीका है बेसिक हेरिटेज (कि पर्ल निम्न प्रकार से है - देखें प्रोग्रामिंग हार्ड है, लेट्स गो गो स्क्रिप्टिंग ) ...
बेसिक में, len
फ़ंक्शन केवल समझ में आता है एक स्ट्रिंग ( दृश्य बेसिक के लिए डॉक्स:) पर किसी भी मान्य स्ट्रिंग स्ट्रिंग या चर नाम को लागू करने के लिए। FilePut फ़ंक्शन।))।
पर्ल इस संदर्भ की अवधारणा का अनुसरण करते हैं। भ्रम की स्थिति है कि के लिए प्रकार के निहित रूपांतरण के साथ जावास्क्रिप्ट में मौजूद +
ऑपरेटर कभी कभी इसके अलावा जा रहा है और कभी कभी संयोजन पर्ल में ऐसा नहीं होता है, क्योंकि +
है हमेशा इसके अलावा और .
है हमेशा संयोजन।
अगर किसी स्केलर के संदर्भ में कुछ का उपयोग किया जाता है, तो इसका स्केलर (उदाहरण के लिए एक स्केलर के रूप में सूची का उपयोग करके, सूची ऐसे व्यवहार करती है जैसे कि यह उसकी लंबाई के अनुरूप संख्या हो)। यदि आप एक स्ट्रिंग ऑपरेटर का उपयोग करते हैं ( eq
समानता परीक्षण के लिए, cmp
स्ट्रिंग तुलना के लिए) स्केलर का उपयोग किया जाता है जैसे कि यह एक स्ट्रिंग था। इसी तरह, अगर किसी गणित के संदर्भ में ( ==
समानता परीक्षण के लिए और <=>
संख्यात्मक तुलना के लिए) कुछ का उपयोग किया गया था , तो स्केलर का उपयोग किया जाता है जैसे कि यह एक संख्या थी।
सभी प्रोग्रामिंग के लिए मौलिक नियम है "वह कार्य करें जो व्यक्ति को सबसे कम आश्चर्यचकित करता है"। इसका मतलब यह नहीं है कि वहाँ कोई आश्चर्य नहीं है, लेकिन प्रयास व्यक्ति को कम से कम आश्चर्यचकित करने के लिए है।
Perl - php के एक करीबी चचेरे भाई के पास जा रहे हैं, ऐसी स्थितियां हैं जहां एक ऑपरेटर स्ट्रिंग या संख्यात्मक संदर्भों में कुछ पर कार्य कर सकता है और व्यवहार लोगों को आश्चर्यचकित कर सकता है। ++
ऑपरेटर ऐसे ही एक उदाहरण है। संख्याओं पर, यह अपेक्षा के अनुरूप व्यवहार करता है। जब एक स्ट्रिंग पर अभिनय करते हैं, जैसे कि "aa"
, यह स्ट्रिंग ( $foo = "aa"; $foo++; echo $foo;
प्रिंट ab
) को बढ़ाता है । यह भी लुढ़क जाएगा ताकि az
जब वृद्धि हो जाए ba
। यह विशेष रूप से आश्चर्यजनक नहीं है।
$foo = "3d8";
echo "$foo\n";
$foo++;
echo "$foo\n";
$foo++;
echo "$foo\n";
$foo++;
echo "$foo\n";
( आइडोन )
यह प्रिंट करता है:
3d8
3d9
3e0
4
एक ही तार पर अलग-अलग कार्य करने वाले निहितार्थ रूपांतरणों और ऑपरेटरों के खतरों में आपका स्वागत है। (पर्ल संभालता है कि कोड थोड़ा अलग तरीके से ब्लॉक होता है - यह तय करता है कि "3d8"
जब ++
ऑपरेटर लागू किया जाता है, तो शुरू से ही एक संख्यात्मक मूल्य होता है और 4
तुरंत ( ideone ) पर जाता है - यह व्यवहार perlop में अच्छी तरह से वर्णित है : ऑटो-इंक्रीमेंट और ऑटो-डिक्रीमेंट )
अब, क्यों एक भाषा कुछ एक तरह से करती है और दूसरा क्या वह दूसरी तरह से डिजाइनरों के डिजाइन विचारों तक पहुंचती है। पर्ल का दर्शन ऐसा करने का एक से अधिक तरीका है - और मैं इनमें से कुछ कार्यों को करने के कई तरीकों के बारे में सोच सकता हूं। दूसरी ओर, Python का PEP 20 में वर्णित एक दर्शन है - The Zen of Python जो बताता है (अन्य बातों के अलावा): "इसमें एक - होना चाहिए और अधिमानतः इसे करने के लिए केवल एक - स्पष्ट तरीका है।"
इन डिज़ाइन अंतरों के कारण विभिन्न भाषाएं होती हैं। पायथन में एक संख्या की लंबाई प्राप्त करने का एक तरीका है। इस दर्शन के विरुद्ध प्रभावशाली रूपांतरण होता है।
संबंधित पढ़ना: रूबी के पास स्ट्रिंग में फिक्सनम के निहितार्थ क्यों नहीं हैं?
perl -e 'print length(100);'
प्रिंट 3.