बस इसे लगाने के लिए, प्रतिबंध का मतलब है कि चीजों को एक साथ रखने के लिए कम सही तरीके हैं, और प्रथम श्रेणी के कार्यों से लूप संरचनाओं के लिए चीजों को बाहर निकालना आसान हो जाता है। उदाहरण के लिए, इस उत्तर से लूप लें :
for (Iterator<String> iterator = list.iterator(); iterator.hasNext();) {
String string = iterator.next();
if (string.isEmpty()) {
iterator.remove();
}
}
जब आप इसके माध्यम से पुनरावृत्ति कर रहे हों, तो किसी तत्व को संग्रह से निकालने के लिए जावा में यह एक सुरक्षित अनिवार्य तरीका होता है। बहुत सारे तरीके हैं जो बहुत करीब लगते हैं, लेकिन गलत हैं। इस पद्धति से अनजान लोग कभी-कभी समस्या से बचने के लिए जटिल तरीकों से गुजरते हैं, जैसे कि एक प्रति के माध्यम से पुनरावृत्ति करना।
यह सामान्य बनाना बहुत मुश्किल नहीं है, इसलिए यह सिर्फ संग्रह से अधिक पर काम करेगा Strings, लेकिन प्रथम श्रेणी के कार्यों के बिना, आप विधेय (स्थिति के अंदर if) को प्रतिस्थापित नहीं कर सकते हैं , इसलिए यह कोड कॉपी और चिपकाया जाता है और थोड़ा संशोधित किया गया।
प्रथम श्रेणी के कार्यों को मिलाएं जो आपको एक पैरामीटर के रूप में विधेय को पारित करने की क्षमता प्रदान करते हैं, अपरिवर्तनीयता के प्रतिबंध के साथ जो आपको बहुत परेशान करता है अगर आप नहीं करते हैं, और आप filterइस बिल्डिंग कोड में जैसे साधारण बिल्डिंग ब्लॉकों के साथ आते हैं। वही काम करता है:
list filter (!_.isEmpty)
अब इस बारे में सोचें कि स्काला के मामले में संकलित समय पर आपके लिए किस प्रकार की प्रणाली की जाँच की जाती है, लेकिन ये जाँचें डायनामिक प्रकार की प्रणालियों द्वारा भी की जाती हैं जब आप इसे चलाते हैं:
listकिसी प्रकार का होना चाहिए जो filterविधि का समर्थन करता है , अर्थात् एक संग्रह।
- तत्वों में
listएक isEmptyविधि होनी चाहिए जो एक बूलियन लौटाती है।
- आउटपुट एक ही प्रकार के तत्वों के साथ एक (संभावित) छोटा संग्रह होगा।
एक बार उन चीजों की जाँच हो जाने के बाद, प्रोग्रामर के पास खराब होने के लिए और कौन से रास्ते बचे हैं? मैं गलती से भूल गया !, जिससे एक अत्यंत स्पष्ट परीक्षण मामला विफल हो गया। यह केवल बनाने के लिए उपलब्ध एकमात्र गलती है, और मैंने इसे केवल इसलिए बनाया क्योंकि मैं सीधे उस कोड से अनुवाद कर रहा था जो उलटा स्थिति के लिए परीक्षण किया गया था।
यह पैटर्न बार-बार दोहराया जाता है। प्रथम श्रेणी के कार्यों ने आपको सटीक शब्दार्थ के साथ छोटे पुन: प्रयोज्य उपयोगिताओं में चीजों को वापस करने की अनुमति दी है, अपरिवर्तनीयता जैसे प्रतिबंध आपको ऐसा करने के लिए प्रेरणा देते हैं, और उन उपयोगिताओं के मापदंडों की जांच करके उन्हें पेंच करने के लिए बहुत कम जगह छोड़ते हैं।
बेशक, यह सब प्रोग्रामर पर निर्भर करता है यह जानते हुए कि filterपहले से मौजूद सरलीकरण फ़ंक्शन , और इसे खोजने में सक्षम होने, या स्वयं को बनाने के लाभ को पहचानना। केवल पूंछ पुनरावृत्ति का उपयोग करके हर जगह इसे खुद को लागू करने का प्रयास करें, और आप अनिवार्य संस्करण के रूप में एक ही जटिलता नाव में वापस आ गए हैं, केवल बदतर। सिर्फ इसलिए कि आप इसे बहुत सरलता से लिख सकते हैं , इसका मतलब यह नहीं है कि सरल संस्करण स्पष्ट है।