क्या आपको डार्ट में "नए" कीवर्ड का उपयोग करने की आवश्यकता है?


94

मेरे डार्ट आधारित एप्लिकेशन में मैंने सिर्फ यह देखा कि मैं newकीवर्ड को छोड़ सकता हूं और सब कुछ पूरी तरह से ठीक है।

के बजाय final widget = new Widget();मैं भी उपयोग कर सकते हैं final widget = Widget();

क्या इससे कोड में कोई प्रभाव पड़ता है?

जवाबों:


119

नहीं, यह नहीं है। साथ डार्ट 2 (अधिक जानकारी के साथ घोषणा के लिए क्लिक करें)new और यह भी constकीवर्ड किए गए थे वैकल्पिक

इसका मतलब यह है कि अपने दम पर new Widget()ठीक वैसा ही करता है Widget()


constकीवर्ड, हालांकि, एक मूल्य है कि एक नहीं होगा बदल सकते हैं constएक करने के लिए परोक्ष const
इसलिए आपको constजरूरत पड़ने पर स्पष्ट रूप से निर्दिष्ट करना होगा ।


6
डार्ट टीम को अभी के लिए थोड़ा पीछे हटना पड़ा और कुछ परिस्थितियाँ हैं जहाँ newया constअभी भी आवश्यक हैं (मुझे उदाहरण या नियम याद नहीं हैं)। Dart 2 के बाद वे इसे वैकल्पिक बनाने के लिए हर जगह एक और प्रयास कर सकते हैं।
गुंटर ज़ोचबॉयर

1
ऐसी कोई जगह नहीं है जहाँ newआवश्यकता हो। यदि आप newएक सही कार्यक्रम से चूक जाते हैं, तो यह हमेशा उसी तरह काम करता रहेगा। आप निकालते हैं constज्यादातर मामलों आप चाहते हैं जहां, एक काम कर कार्यक्रम से तो है लिखने के constलिए कार्यक्रम मान्य होने के लिए, यह अभी भी मान्य होगा। किसी भी समय पहले से ही एक constअभिव्यक्ति है, आप नेस्टेड कास्ट को छोड़ सकते हैं।
lrn

20

डार्ट 2 में, यदि आप एक निर्माता को एक फ़ंक्शन की तरह आमंत्रित करते हैं, बिना newया constसामने, तो यह उपयोग करने के बराबर है new। यदि आप एक कॉस्ट इनवोकेशन चाहते हैं, तो आपको constसामने रखना चाहिए ।

एक कास्ट एक्सप्रेशन के अंदर , आपको constफिर से लिखने की ज़रूरत नहीं है , और कुछ संदर्भों में जिन्हें कॉस्ट एक्सप्रेशंस (जैसे स्विच केस एक्सप्रेशन और कॉन्स्टेबल वैरिएबल के इनिशियलाइज़र) की आवश्यकता होती है, आपको बाहरी कॉस्ट की भी ज़रूरत नहीं है।

इसलिए आपको कभी लिखने की जरूरत नहीं है new

डार्ट भाषा टीम उन अभिव्यक्तियों की अनुमति देना चाहती है जहां आप newया तो सम्मिलित कर सकते हैं या फिर constभी मंगलाचरण सही हो सकता है (अर्थात, निरंतर तर्क के साथ एक निर्माणकर्ता) डिफ़ॉल्ट के constबजाय डालने के लिए डिफ़ॉल्ट रूप से new, Dart 2 के प्रारंभिक अद्यतन में उम्मीद है। उस कारण से , मैं newइसके सामने Object()या किसी अन्य कास्ट कंस्ट्रक्टर को लिखने की सलाह देता हूं , जहां आपको एक नया उदाहरण होने के लिए ऑब्जेक्ट की आवश्यकता होती है। यह एक बहुत ही दुर्लभ मामला है, आमतौर पर आप अपनी अपरिवर्तनीय वस्तु की पहचान के बारे में परवाह नहीं करते हैं (यही कारण है कि सम्मिलित constकरना एक अच्छा विचार माना जाता है)।



5

newकीवर्ड अब की डार्ट 2. के रूप में वैकल्पिक बनाया गया था, एक वर्ग बुला हमेशा उस वर्ग का एक नया उदाहरण वापस आ जाएगी। मेरी सिफारिश के अनुसार, आप इसका उपयोग कर सकते हैं ( नॉट मैनडेटरी ) एक लेआउट परिभाषा के बाहर, लेकिन लेआउट के अंदर छोड़ दें।

एक और बात जो मैं आप लोगों के साथ साझा करना चाहूंगा वह यह है कि यदि आप विगेट्स की घोषणा करते समय उपयोग newया constकीवर्ड करते हैं , तो आप + आइकन भी देख सकते हैं, जिसका उपयोग आप विजेट बॉडी कोड को संक्षिप्त और विस्तारित करने के लिए कर सकते हैं। यह उपयोगी है जब आप डार्ट फ़ाइल में बाकी विजेट कोड को संक्षिप्त करना / छिपाना चाहते हैं जबकि उसी फ़ाइल में किसी अन्य विजेट कोड पर काम कर रहे हैं।


उस ढहने वाली चीज़ पर अच्छी पकड़
MoGa

2
ढहने वाला व्यवहार आईडीई-विशिष्ट होगा। आपको स्पष्ट रूप से यह बताना चाहिए कि यह किस पर लागू होता है।
jamesdlin

1
इसके अलावा, "एक कक्षा को कॉल करना" (जिसके द्वारा मुझे लगता है कि आप "क्लास के कंस्ट्रक्टर का आह्वान करते हैं") हमेशा क्लास का एक नया उदाहरण नहीं देते हैं। यदि आप किसी फैक्ट्री कंस्ट्रक्टर को आमंत्रित करते हैं , तो आपको एक मौजूदा उदाहरण वापस मिल सकता है । यही कारण है कि newहतोत्साहित किया जाता है: इसका उपयोग ऐसा लगता है जैसे यह बिना शर्त एक नया उदाहरण बनाता है जब यह नहीं हो सकता है।
jamesdlin
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.