रूबी की सुंदरता अक्सर इसके शक्तिशाली पुनरावृत्ति विधियों द्वारा उजागर होती है। दो प्रमुख विधियाँ, each
और collect
(जिसे map
भी जाना जाता है), संग्रहों को संसाधित करने के लिए मौलिक हैं। इनकी शक्तियों को समझना और इन्हें कैसे संयोजित करना है, इससे रूबी कोड की दक्षता और पठनीयता में महत्वपूर्ण सुधार होता है।
विषय-सूची
each
विधि को समझनाcollect
(map
) विधि का अन्वेषणeach
औरcollect
को संयोजित करना- उन्नत पुनरावृत्ति तकनीकें
- निष्कर्ष
- अक्सर पूछे जाने वाले प्रश्न (FAQ)
each
विधि को समझना
each
विधि रूबी पुनरावृत्ति का आधार है। यह किसी सरणी, हैश या अन्य गणना योग्य ऑब्जेक्ट के प्रत्येक तत्व के माध्यम से पुनरावृति करती है, प्रत्येक के लिए कोड के एक ब्लॉक को निष्पादित करती है। मुख्य रूप से साइड इफेक्ट्स के लिए उपयोग किया जाता है—each
विधि के दायरे के बाहर कुछ संशोधित करने वाली क्रियाएँ—यह मूल संग्रह को स्वाभाविक रूप से परिवर्तित नहीं करती है।
numbers = [1, 2, 3, 4, 5]
numbers.each do |number|
puts number * 2 # प्रत्येक संख्या को 2 से गुणा करके प्रिंट करता है
end
# आउटपुट:
# 2
# 4
# 6
# 8
# 10
यहाँ, each
पुनरावृति करता है, और ब्लॉक प्रत्येक दोगुनी संख्या को प्रिंट करता है। numbers
सरणी अपरिवर्तित रहती है।
collect
(map
) विधि का अन्वेषण
each
के विपरीत, collect
(या map
—ये समानार्थी हैं) संग्रह को बदलता है, प्रत्येक तत्व पर एक ब्लॉक लागू करने के परिणामों वाली एक नई सरणी लौटाता है। यह संशोधित डेटासेट बनाने के लिए एकदम सही है।
numbers = [1, 2, 3, 4, 5]
squared_numbers = numbers.collect do |number|
number * number # प्रत्येक संख्या का वर्ग करता है
end
puts squared_numbers # [1, 4, 9, 16, 25] प्रिंट करता है
puts numbers # [1, 2, 3, 4, 5] प्रिंट करता है - मूल सरणी अपरिवर्तित
collect
squared_numbers
बनाता है; मूल numbers
सरणी अछूती रहती है।
each
और collect
को संयोजित करना
each
और collect
की शक्ति वास्तव में एक साथ उपयोग किए जाने पर चमकती है। आप डेटा को बदलते हुए साइड इफेक्ट्स के लिए each
का लाभ उठा सकते हैं।
numbers = [1, 2, 3, 4, 5]
squared_numbers = numbers.collect do |number|
puts "प्रसंस्करण: #{number}" # साइड इफेक्ट
number * number
end
puts squared_numbers # [1, 4, 9, 16, 25] प्रिंट करता है
यह collect
ब्लॉक के भीतर परिवर्तन और लॉगिंग को जोड़ता है।
उन्नत पुनरावृत्ति तकनीकें
मूल उपयोग से परे, अधिक जटिल समेकन और परिवर्तनों के लिए inject
/reduce
जैसी विधियों का अन्वेषण करें। ये संग्रहों को संसाधित करने के वैकल्पिक तरीके प्रदान करते हैं, जो तत्व-वार संचालन से परे लचीलापन प्रदान करते हैं।
निष्कर्ष
each
और collect
किसी भी रूबी डेवलपर के लिए आवश्यक हैं। व्यक्तिगत रूप से और संयुक्त रूप से, उनके उपयोगों को समझने से कोड की स्पष्टता, दक्षता और रखरखाव में महत्वपूर्ण सुधार होता है। चुनाव इस बात पर निर्भर करता है कि आपको मूल संग्रह को संशोधित करने की आवश्यकता है या केवल प्रत्येक तत्व पर क्रियाएँ करने की आवश्यकता है।
अक्सर पूछे जाने वाले प्रश्न (FAQ)
- प्रश्न:
collect
औरmap
में क्या अंतर है? उत्तर: ये समानार्थी हैं; कार्यात्मक रूप से समान। पठनीयता के लिए अक्सरmap
को प्राथमिकता दी जाती है। - प्रश्न: क्या
each
कोई मान लौटा सकता है? उत्तर:each
हमेशा मूल संग्रह लौटाता है। इसका उद्देश्य साइड इफेक्ट्स है। - प्रश्न: क्या मैं हैश के साथ
each
का उपयोग कर सकता हूँ? उत्तर: हाँ।my_hash.each { |key, value| puts "#{key}: #{value}" }
- प्रश्न: क्या
collect
के विकल्प हैं? उत्तर: हाँ,inject
/reduce
, लेकिन तत्व-वार परिवर्तनों के लिएcollect
/map
सबसे सरल रहता है।