अक्टूबर 2019 में, पायथन 3.8 ने वालरस ऑपरेटर (:=) के जरिए पीईपी 572 - और इस तरह प्रोग्रामिंग भाषा के इतिहास के सबसे बड़े विवादों में से एक शुरू हो गया। यह बहस इतनी तीखी थी कि पायथन के आविष्कारक गुइडो वैन रोसुम जुलाई 2018 में - रिहाई से पहले ही - बीडीएफएल के रूप में उनकी स्थिति (आजीवन परोपकारी तानाशाह) 2019 की शुरुआत से, पायथन को एक निर्वाचित संचालन परिषद द्वारा शासित किया गया है।
if (n := len(items)) > 10:
print(f"List is too long ({n} elements)")
वालरस चर्चा के तुरंत बाद शासन संबंधी मतभेद उभर आए—यह एक दुर्लभ मामला है जिसमें किसी एक भाषा विशेषता के संरचनात्मक परिणाम हुए हों। अपने बयान में, वैन रोसुम ने बताया: "आखिरी बूँद एक बेहद विवादास्पद पायथन संवर्द्धन प्रस्ताव था। मेरे इसे स्वीकार करने के बाद, लोगों ने ट्विटर जैसे सोशल मीडिया पर ऐसी बातें कहीं जिनसे मुझे व्यक्तिगत रूप से ठेस पहुँची।"
उन्होंने आगे कहा: "अब जब PEP 572 खत्म हो गया है, तो मैं फिर कभी PEP के लिए इतनी कड़ी लड़ाई नहीं लड़ना चाहता और यह नहीं देखना चाहता कि इतने सारे लोग मेरे फैसलों से नफ़रत करते हैं। मैं खुद को निर्णय लेने की प्रक्रिया से पूरी तरह से अलग करना चाहता हूँ।" आलोचना न केवल व्यापक समुदाय से, बल्कि मुख्य डेवलपर्स से भी आई।
उनका तर्क था कि यह ऑपरेटर ज़ेन ऑफ़ पायथन के मूलभूत पायथन सिद्धांतों का खंडन करता है—खासकर जटिलता की बजाय सरलता को प्राथमिकता देना। लगभग तीन दशकों तक निर्विवाद भाषा डिज़ाइनर के रूप में काम करने के बाद, यह एक युग का अंत था। हालाँकि पायथन को एक नया वालरस ऑपरेटर पेश करना पड़ा, जिससे इस प्रक्रिया में उसका समुदाय विभाजित हो गया, लेकिन सवाल यह उठता है: अन्य भाषाएँ समान अवधारणाओं को कैसे संभालती हैं?
पायथन ऑपरेटर := (असाइनमेंट एक्सप्रेशन उर्फ़ "वालरस") PHP में मौजूद नहीं है – क्योंकि इसकी ज़रूरत नहीं है। PHP में, असाइनमेंट ऑपरेटर = हमेशा एक ही समय में कथन और अभिव्यक्ति: असाइनमेंट, असाइन किया गया मान लौटाता है। यही कारण है कि "असाइन-एंड-टेस्ट" जैसे मुहावरेदार पैटर्न काम करते हैं। if-अपनी स्वयं की भाषा विशेषता के बिना स्थितियाँ।
function get_some_field() {
return 'foo';
}
if ($a = get_some_field()) {
echo $a; // foo
}
// Hinweis: $a ist *gesetzt*, selbst wenn die Bedingung falsy wäre.
$a = get_some_field() दाईं ओर असाइन और मूल्यांकन करता है। यदि यह "सत्य" है, तो आप दर्ज करते हैं if-ब्लॉक. पृष्ठभूमि: पायथन में, := (पीईपी 572) क्योंकि साधारण असाइनमेंट एक्सप्रेशन नहीं होते। PHP में, यह हमेशा अलग रहा है, इसलिए इसकी कोई समतुल्य आवश्यकता नहीं है। दो चीजें अक्सर बग का कारण बनती हैं।: = (असाइनमेंट) की प्राथमिकता अधिकांश संबंधपरक ऑपरेटरों की तुलना में कम है; कोष्ठक मूल्यांकन निर्धारित करते हैं।
अधिक जटिल अभिव्यक्तियों में, आपको पठनीयता और स्पष्टता बढ़ाने के लिए हमेशा कोष्ठकों का उपयोग करना चाहिए। ?? इसकी अपनी, बल्कि कम प्राथमिकता है। यह इस तरह के भावों में आश्चर्य की व्याख्या करता है $x ?? null === null. बिना कोष्ठक के, पहले null === null मूल्यांकन किया गया। हमेशा स्पष्ट रूप से ब्रैकेट में रखना बेहतर होता है: ($x ?? null) === null. $a के बाहर भी मौजूद है if-ब्लॉक - संभवतः झूठे मूल्य के साथ।
function get_some_field() {
return 'bar';
}
if ( ($a = get_some_field()) === 'bar' ) {
echo $a; // bar
}
अतः यह स्पष्ट है कि === 'bar' निर्दिष्ट मान पर लागू होता है। पठनीयता और प्राथमिकता के लिए यहाँ कोष्ठक महत्वपूर्ण हैं। व्यवहार में, यह पैटर्न क्वेरी परिणाम को संग्रहीत करके और फिर उसकी जाँच करके अनावश्यक डुप्लिकेट कॉल (जैसे, क्वेरी बिल्डर की) से बचाता है। उत्पादक अनुप्रयोगों में, जैसे कि लारवेल-आधारित परियोजनाओं में, निम्नलिखित पैटर्न अधिक बार देखा जा सकता है।:
if ( ($foo = Foo::where('foo', 'bar')) && $foo->count() > 0 ) {
dd($foo->get());
}
&& शॉर्ट-सर्किटिंग है: दाएँ भाग का मूल्यांकन केवल तभी किया जाता है जब बाएँ भाग सत्य हो। कथन को अपस्ट्रीम असाइन करके, आप कथन को if कथन के बाहर असाइन करने से बचते हैं। यह अच्छा अभ्यास है या नहीं, यह आपकी टीम के कोड और विश्लेषण उपकरणों पर निर्भर करता है; अर्थगत रूप से, यह सही है। कम से कम, आपको पता होना चाहिए कि कोड क्या करता है यदि आप इसे वास्तविक रूप से देखते हैं।
PHP को "वालरस ऑपरेटर" की ज़रूरत नहीं है क्योंकि असाइनमेंट पहले से ही एक्सप्रेशन होते हैं। इससे "असाइन-एंड-टेस्ट" जैसे मुहावरेदार पैटर्न संभव हो जाते हैं - प्रदर्शनकारी और संक्षिप्त। साथ ही, अनुशासन की माँग भी बढ़ जाती है: कोष्ठक, सख्त तुलना, सत्य/असत्य के बारे में जागरूकता और स्पष्ट टीम परंपराएँ अनिवार्य हैं। जो लोग इन दिशानिर्देशों का पालन करते हैं, उन्हें किसी अतिरिक्त भाषा सुविधा की आवश्यकता के बिना वालरस विचार का लाभ मिलता है।