जवाबों:
डार्ट के दो प्रकार के वैकल्पिक पैरामीटर हैं: नाम और स्थिति । इससे पहले कि मैं मतभेदों पर चर्चा करूं, पहले मैं समानता पर चर्चा करूं।
डार्ट के वैकल्पिक पैरामीटर वैकल्पिक हैं कि फ़ंक्शन को कॉल करते समय कॉलर को पैरामीटर के लिए एक मूल्य निर्दिष्ट करने की आवश्यकता नहीं है।
वैकल्पिक मापदंडों को किसी भी आवश्यक पैरामीटर के बाद ही घोषित किया जा सकता है।
वैकल्पिक मापदंडों में एक डिफ़ॉल्ट मान हो सकता है, जिसका उपयोग तब किया जाता है जब कोई कॉलर कोई मान निर्दिष्ट नहीं करता है।
स्थितीय वैकल्पिक पैरामीटर
द्वारा लिपटे एक पैरामीटर [ ]
एक वैकल्पिक वैकल्पिक पैरामीटर है। यहाँ एक उदाहरण है:
getHttpUrl(String server, String path, [int port=80]) {
// ...
}
उपरोक्त कोड में, port
वैकल्पिक है और इसका डिफ़ॉल्ट मान है 80
।
आप getHttpUrl
तीसरे पैरामीटर के साथ या उसके बिना कॉल कर सकते हैं ।
getHttpUrl('example.com', '/index.html', 8080); // port == 8080
getHttpUrl('example.com', '/index.html'); // port == 80
आप एक फ़ंक्शन के लिए कई स्थितीय पैरामीटर निर्दिष्ट कर सकते हैं:
getHttpUrl(String server, String path, [int port=80, int numRetries=3]) {
// ...
}
वैकल्पिक पैरामीटर हैं स्थितीय में आप छोड़ नहीं कर सकता कि port
यदि आप निर्दिष्ट करना चाहते हैं numRetries
।
getHttpUrl('example.com', '/index.html');
getHttpUrl('example.com', '/index.html', 8080);
getHttpUrl('example.com', '/index.html', 8080, 5);
बेशक, जब तक आप यह नहीं जानते कि 8080 और 5 क्या हैं, यह बताना मुश्किल है कि वे स्पष्ट रूप से जादू की संख्या क्या हैं। अधिक पठनीय एपीआई बनाने के लिए आप नामांकित वैकल्पिक मापदंडों का उपयोग कर सकते हैं ।
नाम दिया वैकल्पिक पैरामीटर
द्वारा लिपटे एक पैरामीटर { }
एक नामित वैकल्पिक पैरामीटर है। यहाँ एक उदाहरण है:
getHttpUrl(String server, String path, {int port = 80}) {
// ...
}
आप getHttpUrl
तीसरे पैरामीटर के साथ या उसके बिना कॉल कर सकते हैं । आप चाहिए जब फ़ंक्शन को कॉल पैरामीटर नाम का उपयोग करें।
getHttpUrl('example.com', '/index.html', port: 8080); // port == 8080
getHttpUrl('example.com', '/index.html'); // port == 80
आप एक फ़ंक्शन के लिए कई नामित पैरामीटर निर्दिष्ट कर सकते हैं:
getHttpUrl(String server, String path, {int port = 80, int numRetries = 3}) {
// ...
}
क्योंकि नामित मापदंडों को नाम से संदर्भित किया जाता है, उनका उपयोग उनकी घोषणा से अलग एक क्रम में किया जा सकता है।
getHttpUrl('example.com', '/index.html');
getHttpUrl('example.com', '/index.html', port: 8080);
getHttpUrl('example.com', '/index.html', port: 8080, numRetries: 5);
getHttpUrl('example.com', '/index.html', numRetries: 5, port: 8080);
getHttpUrl('example.com', '/index.html', numRetries: 5);
मेरा मानना है कि नामित पैरामीटर कॉल-टू-समझने की आसान साइटों के लिए बनाते हैं, खासकर जब बूलियन झंडे या आउट-ऑफ-संदर्भ संख्याएं होती हैं।
वैकल्पिक पैरामीटर प्रदान किया गया था अगर जाँच
दुर्भाग्य से, आप "एक वैकल्पिक पैरामीटर प्रदान नहीं किया गया" और "डिफ़ॉल्ट मान के साथ एक वैकल्पिक पैरामीटर प्रदान किया गया" मामलों के बीच अंतर नहीं कर सकते।
नोट: आप स्थितीय वैकल्पिक मापदंडों या नामित वैकल्पिक मापदंडों का उपयोग कर सकते हैं , लेकिन दोनों एक ही फ़ंक्शन या विधि में नहीं। निम्नलिखित की अनुमति नहीं है।
thisFunctionWontWork(String foo, [String positonal], {String named}) {
// will not work!
}
मेरी समझ से डार्ट में, विधि पैरामीटर दो प्रकार में दिया जा सकता है।
>> आवश्यक पैरामीटर
आवश्यक पैरामीटर एक अच्छी तरह से ज्ञात पुरानी शैली पैरामीटर है, जिससे हम सभी परिचित हैं
उदाहरण :
findVolume(int length, int breath, int height) {
print('length = $length, breath = $breath, height = $height');
}
findVolume(10,20,30);
उत्पादन:
length = 10, breath = 20, height = 30
>> वैकल्पिक स्थितिगत पैरामीटर
पैरामीटर को वर्ग ब्रैकेट के साथ प्रकट किया जाएगा [] और वर्ग ब्रैकेट पैरामीटर वैकल्पिक हैं।
उदाहरण:
findVolume(int length, int breath, [int height]) {
print('length = $length, breath = $breath, height = $height');
}
findVolume(10,20,30);//valid
findVolume(10,20);//also valid
उत्पादन:
length = 10, breath = 20, height = 30
length = 10, breath = 20, height = null // no value passed so height is null
>> वैकल्पिक नामांकित पैरामीटर
उदाहरण:
findVolume(int length, int breath, {int height}) {
print('length = $length, breath = $breath, height = $height');
}
findVolume(10,20,height:30);//valid & we can see the parameter name is mentioned here.
findVolume(10,20);//also valid
उत्पादन:
length = 10, breath = 20, height = 30
length = 10, breath = 20, height = null
>> वैकल्पिक डिफ़ॉल्ट पैरामीटर
उदाहरण:
findVolume(int length, int breath, {int height=10}) {
print('length = $length, breath = $breath, height = $height');
}
findVolume(10,20,height:30);//valid
findVolume(10,20);//valid
उत्पादन:
length = 10, breath = 20, height = 30
length = 10, breath = 20, height = 10 // default value 10 is taken
इस वीडियो लिंक से दिए गए स्पष्ट स्पष्टीकरण के लिए धन्यवाद, वीडियो निर्माता को क्रेडिट।
वीडियो लिंक: OptionalPositionalParameters
जब एक फ़ंक्शन का पैरामीटर "पैरामनेम: वैल्यू" सिंटैक्स का उपयोग करके निर्दिष्ट किया जाता है, तो यह एक नामित पैरामीटर है। ऐसे मापदंडों को [और] कोष्ठक के बीच संलग्न करके वैकल्पिक रूप से प्रस्तुत किया जा सकता है। इस समारोह के अल्पविकसित प्रदर्शन को निम्नलिखित हैलो वर्ल्ड कार्यक्रम में प्रदर्शित किया जा सकता है:
sayHello([String name = ' World!']) {
print('Hello, ${name}');
}
void main() {
sayHello('Govind');
}
से डॉक पर हम पाते हैं कि दोनों positional
और named
पैरामीटर वैकल्पिक हैं, जिसका मतलब है कि वे सभी अनुपस्थित हो सकता है।
मेरी राय में, named
पैरामीटर positional
लोगों की तुलना में अधिक सख्त हैं। उदाहरण के लिए, यदि आप ऐसी विधि की घोषणा करते हैं:
String say({String from, String msg})
ऊपर from
और msg
कर रहे हैं named
जब आप विधि कॉल, पैरामीटर say
आप का उपयोग करना चाहिए say(from: "xx", msg: "xx")
। कुंजियाँ अनुपस्थित नहीं हो सकतीं।
हालाँकि यदि आप स्थितीय मापदंडों का उपयोग करते हैं, तो आप स्वतंत्र हैं।
Named
मापदंडों को इस तरह से कहा जाता है क्योंकि आप वास्तव में उन्हें नाम से पहचान सकते हैं और स्थिति से नहीं (यदि आप दो नामित पारमों की स्थिति स्विच करते हैं, तो यह नहीं है)। जवाब Savaranaraja से ऊपर देखें
स्थितिगत पैरामीटर:
वे डिफ़ॉल्ट मापदंडों के समान हैं। उदाहरण के लिए:
void add(int x, [int y = 3]);
यहाँ y का डिफ़ॉल्ट मान 3 है
नामित पैरामीटर:
ये ऐसे पैरामीटर हैं जिन्हें किसी भी क्रम में पारित मूल्य के बाद पैरामीटर के नाम से पारित किया जा सकता है। उदाहरण के लिए:
void sum({int num1, int num2});
इस फ़ंक्शन को इस तरह कहा जाता है:
sum(num1: 12, num2: 24);
इसके अलावा नामित पैरामीटर में डिफ़ॉल्ट मान भी हो सकते हैं।