Elixir Language
धारा
खोज…
टिप्पणियों
धाराएँ संयोजी, आलसी enumerables हैं।
उनके आलस्य के कारण, धाराएँ बड़े (या अनंत) संग्रह के साथ काम करते समय उपयोगी होती हैं। जब एनम के साथ कई कार्यों का Enum
, मध्यवर्ती सूचियां बनाई जाती हैं, जबकि Stream
गणनाओं का एक नुस्खा बनाता है जिसे बाद के क्षण में निष्पादित किया जाता है।
कई ऑपरेशन का पीछा करते हुए
Stream
विशेष रूप से तब उपयोगी होती है जब आप एक संग्रह पर कई ऑपरेशन चलाना चाहते हैं। ऐसा इसलिए है क्योंकि Stream
आलसी है और केवल एक पुनरावृत्ति करता है (जबकि Enum
कई पुनरावृत्तियों करेगा, उदाहरण के लिए)।
numbers = 1..100
|> Stream.map(fn(x) -> x * 2 end)
|> Stream.filter(fn(x) -> rem(x, 2) == 0 end)
|> Stream.take_every(3)
|> Enum.to_list
[2, 8, 14, 20, 26, 32, 38, 44, 50, 56, 62, 68, 74, 80, 86, 92, 98, 104, 110,
116, 122, 128, 134, 140, 146, 152, 158, 164, 170, 176, 182, 188, 194, 200]
यहाँ, हमने 3 ऑपरेशन ( map
, filter
और take_every
) को जंजीर दिया, लेकिन Enum.to_list
को कॉल करने के बाद ही अंतिम पुनरावृत्ति हुई।
Stream
आंतरिक रूप से क्या करता है, यह है कि यह तब तक इंतजार करता है जब तक कि वास्तविक मूल्यांकन की आवश्यकता न हो। इससे पहले, यह सभी कार्यों की एक सूची बनाता है, लेकिन एक बार मूल्यांकन की आवश्यकता होती है, यह संग्रह के माध्यम से एक बार जाता है, प्रत्येक आइटम पर सभी कार्यों को चलाता है। यह Enum
तुलना में अधिक कुशल बनाता है, जो इस मामले में उदाहरण के लिए 3 पुनरावृत्तियों करेगा।