2015-01-06 2 views
6

कुछ दिन पहले, मैंने देखा डार्ट की सूची वर्ग single संपत्ति है। फिर, मैंने एक आधिकारिक एपीआई दस्तावेज़ पढ़ा, और समझा कि यह संपत्ति कैसे काम करती है। यह मतलब मुझे लगता है कि List.single काम करता है पता है इस प्रकार है:List.single संपत्ति का मुख्य उद्देश्य क्या है?

print(['a'].single);  // outputs 'a' 
print(['a', 'b'].single) // throws StateError 

लेकिन मैं single संपत्ति के किसी भी व्यावहारिक उपयोग के मामले नहीं मिल रहा। ऊपर दिखाए गए चाइल्डिश कोड वास्तव में वास्तविक प्रोग्रामिंग में कोई समझ नहीं लेते हैं।

संपत्ति का उद्देश्य क्या है? यदि किसी सूची में दो या दो से अधिक तत्व होते हैं तो यह संपत्ति अपवाद क्यों फेंकती है? यह एक बुलियन संपत्ति क्यों नहीं है जो इस बात का खड़ा है कि सूची में केवल एक तत्व है या नहीं? डार्ट भाषा डेवलपर्स को लगता है कि कोर एपीआई में List.single शामिल करना उपयोगी है?

आप इस बारे में कोई जानकारी है, तो मुझे बहुत सराहना अगर तुम मुझे एक हाथ देना होगा।

+0

एमएमएमएम ... परीक्षण? https://github.com/dart-lang/bleeding_edge/blob/80988a506bdf74d2e87bf0d7e1211d035c2e5624/dart/tests/corelib/iterable_single_test.dart – JAre

उत्तर

5

आप मामले में single उपयोग कर सकते हैं आप एक Iterable केवल एक ही तत्व की उम्मीद है। यहाँ एक वास्तविक दुनिया उदाहरण है: हम डेटाबेस कनेक्शन एक एसक्यूएल प्रश्नों पर अमल करने query विधि है कि है। विधि क्वेरी द्वारा प्रभावित पंक्तियों को वापस लाती है।

var row = databaseConnection.query('SELECT * FROM xyz WHERE id=5').single; 

यह कोई या एक से अधिक लाइन के मामले में नाकाम रहने के प्रभावित कर रहे हैं की एक छोटी रास्ता देती है: अब एक प्रश्न जहां केवल उम्मीद ठीक एक लाइन प्रभावित होने की पर विचार करें। निश्चित रूप से, कोई भी लिख सकता है:

var rows = databaseConnection.query('SELECT * FROM xyz WHERE id=5'); 

if (rows.length != 1) { 
    throw new StateError('Something is wrong'); 
} 

var row = rows.first; 

लेकिन यह बहुत लंबा है। वैकल्पिक रूप से आप assert चाहते हैं।

ListIterable लागू करता है, इसमें single भी शामिल है। यदि आप वास्तव में एक तत्व की अपेक्षा करते हैं, तो single गेटर्स स्ट्रीम के लिए भी उपयोगी है। Stream पंक्तियों के समान उदाहरण पर विचार करें:

databaseConnection.query('SELECT * FROM xyz WHERE id=5').single.then((row) { 
    print('Process the row'); 
}); 
+0

आपको बहुत बहुत धन्यवाद! समझना बहुत आसान है। मैंने अनदेखा किया था कि यह निकाले गए रिकॉर्ड्स पर जोर देने के लिए एक शॉर्टेंड के रूप में काम करता है। –

संबंधित मुद्दे