newजावा, जावास्क्रिप्ट, और सी # जैसी भाषाओं में कीवर्ड एक वर्ग का एक नया उदाहरण बनाता है।
यह सिंटैक्स सी ++ से विरासत में मिला है, जहां newविशेष रूप से ढेर पर एक वर्ग के नए उदाहरण को आवंटित करने के लिए उपयोग किया जाता है, और नए उदाहरण के लिए एक सूचक लौटाता है। C ++ में, यह ऑब्जेक्ट बनाने का एकमात्र तरीका नहीं है। आप स्टैक पर एक ऑब्जेक्ट का निर्माण भी कर सकते हैं, बिना उपयोग के new- और वास्तव में, वस्तुओं के निर्माण का यह तरीका C ++ में बहुत अधिक सामान्य है।
इसलिए, C ++ बैकग्राउंड से आते हुए, newजावा, जावास्क्रिप्ट और C # जैसी भाषाओं में कीवर्ड मेरे लिए स्वाभाविक और स्पष्ट था। फिर मैंने पायथन सीखना शुरू किया, जिसमें newकीवर्ड नहीं है । पायथन में, एक उदाहरण का निर्माण कंस्ट्रक्टर को कॉल करके किया जाता है, जैसे:
f = Foo()
सबसे पहले, यह मेरे लिए थोड़ा सा लग रहा था, जब तक यह मेरे लिए नहीं हुआ कि पायथन के पास कोई कारण नहीं है new, क्योंकि सब कुछ एक वस्तु है इसलिए विभिन्न कंस्ट्रक्टर सिंटैक्स के बीच खंडन करने की कोई आवश्यकता नहीं है।
लेकिन फिर मैंने सोचा - वास्तव newमें जावा में क्या बात है ? हमें क्यों कहना चाहिए Object o = new Object();? सिर्फ क्यों नहीं Object o = Object();? C ++ में निश्चित रूप से एक आवश्यकता है new, क्योंकि हमें ढेर पर आवंटित करने और स्टैक पर आवंटित करने के बीच अंतर करने की आवश्यकता है, लेकिन जावा में सभी ऑब्जेक्ट्स को हीप पर बनाया जाता है, इसलिए newकीवर्ड भी क्यों है ? जावास्क्रिप्ट के लिए एक ही सवाल पूछा जा सकता है। C # में, जिसे मैं बहुत कम परिचित हूं, मुझे लगता है कि newवस्तु प्रकार और मूल्य प्रकारों के बीच अंतर करने के संदर्भ में कुछ उद्देश्य हो सकता है, लेकिन मुझे यकीन है।
भले ही, यह मुझे लगता है कि कई भाषाएँ जो C ++ के बाद आईं, उन्हें केवल "विरासत में मिली" newकीवर्ड - बिना इसकी आवश्यकता के। यह लगभग एक शाब्दिक खोजशब्द की तरह है । हमें किसी भी कारण से इसकी आवश्यकता नहीं लगती, और फिर भी यह वहां है।
प्रश्न: क्या मैं इस बारे में सही हूं? या फिर कुछ सम्मोहक कारण है जो newC ++ में होने की आवश्यकता है - जावा, जावास्क्रिप्ट और C # जैसी स्मृति-प्रबंधित भाषाओं से प्रेरित है लेकिन पायथन नहीं है?
fफ़ंक्शन से बच नहीं जाता है, तो स्टैक स्पेस आवंटित करें।
fजब एनक्लोजर फ़ंक्शन वापस आता है तो जीसी ऑब्जेक्ट एकत्र कर सकता है।
newकीवर्ड क्यों है । बेशक मैं एक नया चर, बेवकूफ संकलक बनाना चाहता हूं! मेरी राय में एक अच्छी भाषा में एक वाक्यविन्यास होगाf = heap Foo(), जैसेf = auto Foo()।