ऐरे के बुनियादी ऑपरेशन लागू कीजिए।
फंक्शनल भाषाओं में length, map और reduce जैसे ऐरे ऑपरेशन बहुत आम हैं। पहले से मौजूद फंक्शन इस्तेमाल किए बिना बुनियादी ऐरे ऑपरेशनों की एक श्रृंखला लागू कीजिए।
लागू किए जाने वाले ऑपरेशनों की सही संख्या और नाम इस बात पर निर्भर करते हैं कि आप किस ट्रैक पर हैं, ताकि मौजूदा नामों से टकराव न हो। आम तौर पर आपको जो ऑपरेशन लागू करने होंगे, उनमें ये शामिल हैं:
append (दो ऐरे दिए जाने पर, दूसरे ऐरे के सारे एलिमेंट पहले ऐरे के अंत में जोड़िए);concatenate (ऐरों की एक श्रृंखला दिए जाने पर, सभी ऐरों के सारे एलिमेंट मिलाकर एक ही समतल ऐरे बनाइए);filter (एक प्रेडिकेट और एक ऐरे दिए जाने पर, वे सारे एलिमेंट वाला ऐरे लौटाइए जिनके लिए predicate(item) सही होता है);length (एक ऐरे दिए जाने पर, उसमें मौजूद कुल एलिमेंट की संख्या लौटाइए);map (एक फंक्शन और एक ऐरे दिए जाने पर, हर एलिमेंट पर function(item) लागू करने के नतीजों वाला ऐरे लौटाइए);foldl (एक फंक्शन, एक ऐरे और शुरुआती एक्युमुलेटर दिए जाने पर, हर एलिमेंट को बाईं ओर से एक्युमुलेटर में फोल्ड (रिड्यूस) कीजिए);foldr (एक फंक्शन, एक ऐरे और एक शुरुआती एक्युमुलेटर दिए जाने पर, हर एलिमेंट को दाईं ओर से एक्युमुलेटर में फोल्ड (रिड्यूस) कीजिए);reverse (एक ऐरे दिए जाने पर, एक ऐसा ऐरे लौटाइए जिसमें सारे मूल एलिमेंट हों, लेकिन उलटे क्रम में)।ध्यान रखिए कि फोल्ड फंक्शनों (foldl, foldr) को आर्गुमेंट किस क्रम में दिए जाते हैं, यह महत्वपूर्ण है।
Java में क्लास मेथड की जगह इंस्टेंस मेथड इस्तेमाल करना बेहतर तरीका माना जाता है। लेकिन कुछ ऐसी स्थितियाँ भी होती हैं जिनमें किसी फंक्शन का static होना पूरी तरह उचित होता है। Java में क्लासें बदलाव के लिए बंद रहती हैं (यानी Ruby या JavaScript जैसी भाषाओं की तरह आप किसी क्लास की परिभाषा के बाहर उसमें नए मेंबर नहीं जोड़ सकते), इसलिए आप किसी क्लास में सीधे नया व्यवहार नहीं जोड़ सकते। तो अगर आप किसी दिए गए टाइप के लिए फिर भी व्यवहार परिभाषित करना चाहें, तो करें क्या? ऐसी स्थिति में सही हल यही है कि एक यूटिलिटी मेथड लिखा जाए।
ऐसे मेथड के समूहों को अक्सर "यूटिलिटी क्लास" कहा जाता है। JRE में ऐसी क्लासों के कुछ उदाहरण Arrays और Collections हैं।
इस अभ्यास में हम चाहते हैं कि List में map(), reduce(), filter() जैसे मेथड हों। List में ये नहीं हैं, इसलिए हम स्टैटिक मेथड इस्तेमाल कर रहे हैं।
foldLeft और foldRight मेथड "फोल्ड" फंक्शन हैं। फोल्ड की अवधारणा फंक्शनल प्रोग्रामिंग की दुनिया में बहुत प्रचलित है, पर ऑब्जेक्ट-ओरिएंटेड दुनिया में उतनी नहीं। फोल्डिंग पर Wikipedia का पेज देखिए। उसमें सामान्य पृष्ठभूमि और सिग्नेचर तथा इम्प्लीमेंटेशन के संकेत दोनों मिलेंगे।
Exercism पर साइन अप कीजिए और Java को 26 कॉन्सेप्ट158 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।
रिकर्शन का एक व्यावहारिक परिचय पाइए, ऐरे ऑपरेशन के इम्पेरेटिव और फंक्शनल विकल्प जानिए, और टेल-कॉल रिकर्शन तथा एक्युमुलेटर फंक्शनों की गहराई में उतरिए।