फंक्शनल रिएक्टिव प्रोग्रामिंग का उपयोग करके हैंगमैन खेल का तर्क लागू कीजिए।
हैंगमैन शब्दों का अनुमान लगाने वाला एक सरल खेल है।
फंक्शनल रिएक्टिव प्रोग्रामिंग इंटरैक्टिव प्रोग्राम लिखने का एक तरीका है। यह सामान्य दृष्टिकोण से इस तरह अलग है: "जब बटन दबाया जाए तो काउंटर बढ़ाइए" कहने के बजाय आप लिखते हैं "काउंटर की वैल्यू बटन दबाए जाने की संख्या का जोड़ है।"
फंक्शनल रिएक्टिव प्रोग्रामिंग का उपयोग करके हैंगमैन के पीछे का बुनियादी तर्क लागू कीजिए। इसके लिए आपको एक FRP लाइब्रेरी इंस्टॉल करनी होगी। यह इस अभ्यास की भाषा और ट्रैक के अनुसार अलग-अलग फाइलों में बताया गया है।
फंक्शनल प्रोग्रामिंग की एक मुख्य विशेषता यह है कि उसमें साइड इफेक्ट से मुक्त फंक्शन होते हैं, और आपको यह सोचने की ज़रूरत नहीं पड़ती कि किसी फंक्शन ने कौन-कौन से छिपे ऑब्जेक्ट बदल दिए हैं।
रिएक्टिव प्रोग्रामिंग में यह नहीं होता कि कोई कंपोनेंट खुद सक्रिय होकर काम ढूँढता रहे, बल्कि काम कंपोनेंट तक धकेल दिया जाता है। यह कॉलबैक जैसा ही है, बस बहुत ऊँचे स्तर पर, और ज़्यादा शक्तिशाली एब्स्ट्रैक्शन के साथ। बहुत बार रिएक्टिव प्रोग्रामिंग का उपयोग फंक्शनल प्रोग्रामिंग के साथ मिलाकर किया जाता है।
इस अभ्यास में हम RxJava का उपयोग करेंगे, जो रिएक्टिव प्रोग्रामिंग के लिए एक जानी-मानी लाइब्रेरी है और इसका API Java में है।
इस अभ्यास में बनाई गई स्थिति एक ऐसे एप्लिकेशन की है जिसे दो इनपुट मिलते हैं:
ये दोनों इनपुट Observables की मदद से लागू किए गए हैं, यानी io.reactivex.Observable क्लास का उपयोग करके।
मोटे तौर पर, आप किसी Observable को सब्सक्राइब कर सकते हैं ताकि कहीं पैदा हो रही वैल्यू पर आप प्रतिक्रिया दे सकें। उदाहरण के लिए, जब गेम इंजन को पता चलता है कि कोई नया खेल शुरू हुआ है, तो वह नए शब्द भेजता है, या कीबोर्ड इवेंट से अक्षरों के इनपुट बनते हैं।
लेकिन कई रिएक्टिव फ्रेमवर्क शक्तिशाली एब्स्ट्रैक्शन देते हैं, जैसे map जिससे आप मिले हुए इनपुट को बदल सकते हैं, या combine जिससे आप एक या अधिक Observables को आपस में जोड़ सकते हैं।
Output क्लास इस अभ्यास की प्रोसेसिंग का अपेक्षित परिणाम है। इससे कोई फ्रंटएंड खेल की पूरी स्थिति दिखा सकता है, और उस फ्रंटएंड से किसी तरह का स्टोरेज रखने की ज़रूरत नहीं पड़ती। इस तरह यह भी फंक्शनल बन जाता है।
इस अभ्यास में आपको कोई ऐसा तरीका निकालना है जिससे दोनों इनपुट का उपयोग करके यह आउटपुट एक Observable के रूप में बनाया जा सके।
Exercism पर साइन अप कीजिए और Java को 26 कॉन्सेप्ट158 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।