paint-brush
सी# में फ़ोरैच लूप्स - एक शुरुआती मार्गदर्शिकाद्वारा@devleader
1,477 रीडिंग
1,477 रीडिंग

सी# में फ़ोरैच लूप्स - एक शुरुआती मार्गदर्शिका

द्वारा Dev Leader10m2024/01/08
Read on Terminal Reader

बहुत लंबा; पढ़ने के लिए

C# में फ़ोरैच लूप्स को समझना डेवलपर्स के लिए एक मौलिक कौशल है। फ़ोरैच लूप का उपयोग करके, आप समय बचा सकते हैं, साफ़ और अधिक संक्षिप्त कोड लिख सकते हैं, और पारंपरिक फ़ॉर लूप से जुड़े सामान्य नुकसान से बच सकते हैं। इस पूरे लेख में, मैंने C# में फ़ोरैच लूप्स के मूल सिंटैक्स, बचने के लिए सामान्य गलतियों, LINQ क्वेरीज़ और लैम्ब्डा जैसी उन्नत तकनीकों और फ़ोरैच लूप्स का उपयोग करने के सर्वोत्तम अभ्यासों को कवर किया है।
featured image - सी# में फ़ोरैच लूप्स - एक शुरुआती मार्गदर्शिका
Dev Leader HackerNoon profile picture

आइए C# में फ़ोरैच लूप्स में महारत हासिल करने और अपनी प्रोग्रामिंग दक्षता बढ़ाने के बारे में बात करें! फ़ोरैच लूप C# प्रोग्रामिंग में एक महत्वपूर्ण अवधारणा है - और उस मामले के लिए कई अन्य भाषाएँ। जब संग्रह और सरणियों के माध्यम से पुनरावृत्ति की बात आती है, तो वे विशेष रूप से उपयोगी होते हैं।


इस लेख के अंत तक, आप फ़ोरैच लूप के मूल सिंटैक्स, बचने के लिए सामान्य गलतियों, आज़माने के लिए उन्नत तकनीकों और उन्हें अपनी परियोजनाओं में प्रभावी ढंग से उपयोग करने के लिए सर्वोत्तम प्रथाओं की ठोस समझ प्राप्त करने की उम्मीद कर सकते हैं।


चाहे आप नौसिखिया हों या एक अनुभवी सॉफ्टवेयर इंजीनियर, यह लेख आपके कोड को सुव्यवस्थित करने और अपने प्रोग्रामिंग कौशल को बेहतर बनाने के लिए फ़ोरैच लूप्स का उपयोग करने के तरीके में मूल्यवान अंतर्दृष्टि प्रदान करेगा।


C# में फ़ोरैच लूप्स का महत्व

फ़ोरैच लूप सॉफ़्टवेयर इंजीनियरों और डेवलपर्स के लिए आवश्यक हैं जो C# में संग्रह और सरणियों के साथ काम करते हैं। वे एक सरल और संक्षिप्त वाक्यविन्यास के साथ इन डेटा संरचनाओं की पुनरावृत्ति की अनुमति देते हैं जो उनके साथ काम करना आसान और अधिक कुशल बनाता है। फ़ोरैच लूप का उपयोग करने का एक प्रमुख लाभ यह है कि उनमें पारंपरिक फ़ॉर लूप की तुलना में कम जटिलता होती है। रेंज चेकिंग और इंडेक्सिंग को अलविदा कहें!


लूप के लिए एक इंडेक्स वेरिएबल के उपयोग की आवश्यकता होती है, जिसके लिए अक्सर अतिरिक्त घोषणाओं और असाइनमेंट की आवश्यकता होती है। दूसरी ओर, फ़ोरैच लूप पर्दे के पीछे इंडेक्स वैरिएबल और पुनरावृत्त तर्क को प्रबंधित करते हैं, जिससे संग्रह या सरणी के माध्यम से लूप करने के लिए आवश्यक कोड की मात्रा कम हो जाती है। यह सरलता स्वच्छ कोड की ओर ले जाती है जिसे पढ़ना और बनाए रखना आसान होता है।


फ़ोरैच लूप का उपयोग करने का एक अन्य लाभ आसान डिबगिंग है। चूँकि पुनरावृत्ति तर्क को दूर कर दिया गया है, पुनरावृत्ति प्रक्रिया में होने वाली कोडिंग त्रुटियों का निदान करना आसान है। लूप के लिए उपयोग करते समय यह विशेष रूप से प्रासंगिक है जहां एक-एक करके त्रुटि की संभावना मौजूद होती है जिसे पहचानना और हल करना मुश्किल हो सकता है।

C# में फ़ोरैच लूप्स का मूल सिंटैक्स

C# में फ़ोरैच लूप का मूल सिंटैक्स इस प्रकार है:

 dataType[] collectionName = new dataType[10]; foreach (dataType variableName in collectionName) { //Execute code for each item in collectionName using variableName as you go. }


डेटाटाइप संग्रह में आइटम का प्रकार है, वेरिएबलनाम संग्रह में वर्तमान आइटम को दिया गया नाम है क्योंकि इसे पुनरावृत्त किया जा रहा है, और संग्रहनाम संग्रह का नाम है जिसे पुनरावृत्त किया जा रहा है। 'इन' कीवर्ड वह है जो सी # को बताता है कि लूप एक फ़ोरैच लूप है, और संग्रह में प्रत्येक आइटम के लिए घुंघराले ब्रेसिज़ के अंदर तर्क निष्पादित किया जाता है।


फ़ोरैच लूप का उपयोग IEnumerable इंटरफ़ेस के संयोजन में भी किया जा सकता है, जो एक समय में एक संग्रह में मानों तक पहुंचने का एक तरीका प्रदान करता है। IEnumerable इंटरफ़ेस और फ़ोरैच लूप का उपयोग मेमोरी उपयोग को कम कर सकता है और डेवलपर्स को केवल आवश्यकता पड़ने पर संग्रह से मान प्राप्त करने की अनुमति देकर प्रदर्शन बढ़ा सकता है - लेकिन यह हमेशा काला और सफेद नहीं होता है।


इस दृष्टिकोण का उपयोग आमतौर पर बड़े डेटासेट से निपटने के दौरान किया जाता है, जिन्हें एक साथ संसाधित करना अव्यावहारिक होगा।


फ़ोरैच लूप्स का उपयोग करने में सामान्य गलतियाँ

फ़ोरैच लूप का उपयोग करते समय, कई सामान्य गलतियाँ होती हैं जिनका सामना डेवलपर्स कर सकते हैं यदि वे सावधान न रहें। इन गलतियों से बचने के लिए सावधानी बरतना महत्वपूर्ण है क्योंकि इनसे हल करने में मुश्किल बग, क्रैश और रनटाइम त्रुटियां हो सकती हैं। कुछ सबसे आम गलतियों पर नीचे चर्चा की गई है और उनसे बचने और हल करने के सुझाव दिए गए हैं।

पुनरावृत्ति के दौरान संशोधन

एक गलती लूप के दौरान दोहराए जा रहे संग्रह को संशोधित करने का प्रयास करना है। संशोधित संग्रह अनपेक्षित व्यवहार का कारण बन सकते हैं, जैसे अनंत लूप या कुछ वस्तुओं को छोड़ना। इस गलती से बचने के लिए, यदि संशोधन आवश्यक हो तो काम करने के लिए संग्रह की एक प्रति बनाना महत्वपूर्ण है, जिससे पुनरावृत्ति प्रक्रिया के दौरान मूल संग्रह के प्रत्यक्ष संशोधन की संभावना समाप्त हो जाएगी।

शून्य सन्दर्भ

एक और आम गलती पुनरावृत्त करने का प्रयास करने से पहले शून्य संदर्भों की जांच नहीं करना है। यह गलती अशक्त संदर्भ अपवादों को जन्म दे सकती है, जिससे प्रोग्राम क्रैश हो सकता है और इसे पकड़ना और हल करना मुश्किल हो सकता है। पुनरावृत्ति प्रक्रिया शुरू करने से पहले शून्य संदर्भों की जाँच करना इस गलती को रोकने का एक प्रभावी तरीका है।

समवर्ती संशोधन

समवर्ती संशोधन समस्याएं भी निराशाजनक हो सकती हैं, जिससे अप्रत्याशित प्रोग्राम व्यवहार और पुनरुत्पादन में कठिन दोष उत्पन्न हो सकते हैं। ऐसा तब हो सकता है जब एकाधिक थ्रेड एक ही संग्रह तक पहुंचें और उसे संशोधित करें। डेवलपर्स एक सिंक्रनाइज़ संग्रह वर्ग का उपयोग करके या ताले का उपयोग करके समवर्ती संशोधन समस्याओं से बच सकते हैं ताकि यह सुनिश्चित हो सके कि एक समय में केवल एक थ्रेड संग्रह को संशोधित कर सकता है।


फ़ोरैच लूप्स में ब्रेक और जारी रखें स्टेटमेंट का उपयोग करना

ब्रेक स्टेटमेंट निष्पादित होने पर लूप को तुरंत समाप्त कर देगा, भले ही संग्रह ने पुनरावृत्ति समाप्त कर दी हो या नहीं। वैकल्पिक रूप से, एक जारी कथन तुरंत लूप के अगले पुनरावृत्ति पर चला जाएगा, वर्तमान पुनरावृत्ति में कोड की शेष पंक्तियों को छोड़ देगा। इन कथनों का उपयोग त्रुटि-जाँच को सरल बनाने और कोड पठनीयता में सुधार करने के लिए किया जा सकता है।


उदाहरण के लिए, किसी संग्रह में किसी विशिष्ट आइटम की खोज करते समय ब्रेक स्टेटमेंट उपयोगी हो सकता है, और आइटम मिलते ही लूप को रोका जा सकता है। जब ठीक से उपयोग किया जाता है, तो तोड़ें और जारी रखें कथन कोड की जटिलता को कम कर सकते हैं, इसके प्रदर्शन को बढ़ा सकते हैं, और इसका पालन करना और समझना आसान बना सकते हैं।


ब्रेक कीवर्ड के उदाहरण के लिए इस कोड को देखें।

 Item? foundItem = null; foreach (var item in collection) { if (item.Name == "Dev Leader") { foundItem = item; break; } }

फ़ोरैच लूप्स के साथ उन्नत तकनीकें

जैसे-जैसे आप C# में फ़ोरैच लूप का उपयोग करने में अधिक सहज हो जाते हैं, वे उनके लिए उपलब्ध कुछ उन्नत तकनीकों का पता लगाना चाह सकते हैं। फ़ोरैच लूप के साथ उन्नत तकनीकें कोड को और अधिक अनुकूलित करने और प्रदर्शन को बेहतर बनाने में मदद कर सकती हैं। यह अनुभाग उच्च स्तर पर कई तकनीकों का पता लगाएगा, जिसमें LINQ क्वेरीज़ और लैम्ब्डा, गणना और फ़िल्टरिंग, और समानांतरीकरण शामिल हैं।


इनमें से प्रत्येक अपने स्वयं के पूर्ण लेख के योग्य विषय हैं।

लूप्स के भीतर LINQ और लैम्ब्डा

एक उन्नत तकनीक फ़ोरैच लूप के साथ LINQ क्वेरीज़ और लैम्ब्डा का उपयोग कर रही है। LINQ डेवलपर्स को अधिक संक्षिप्त और अभिव्यंजक कोड लिखने की अनुमति देता है। क्वेरीज़ को LINQ सिंटैक्स का उपयोग करके लिखा जा सकता है, और लैम्ब्डा का उपयोग सीधे लूप के भीतर डेटा को फ़िल्टर करने, सॉर्ट करने और हेरफेर करने के लिए किया जा सकता है, जिससे बाद के लूप की आवश्यकता कम हो जाती है।


आइए एक उदाहरण देखें:

 public sealed record Item( int Id, string Name, DateTime CreatedDateTimeUtc); // Use .Select() from LINQ to change what we're operating on foreach (var item in collection.Select(x => new { Id = x.Id, Name = x.Name })) { if (item.Name == "Dev Leader") { // we're only interested in the ID, so return it! return item.Id; } }

छनन

एक अन्य तकनीक गणना और फ़िल्टरिंग है, जो बड़े डेटासेट की मेमोरी फ़ुटप्रिंट को कम करने में मदद कर सकती है। यह तकनीक केवल डेटा के सबसेट को उत्पन्न करने की अनुमति देती है जो वर्तमान ऑपरेशन के लिए प्रासंगिक है और जो एक विशिष्ट मानदंड को पूरा करता है। बड़े डेटासेट के साथ काम करते समय यह बहुत फायदेमंद हो सकता है क्योंकि यह पूरे डेटासेट को एक ही बार में संसाधित करने की आवश्यकता से बचाता है, जिसमें समय लग सकता है और जिसके परिणामस्वरूप प्रदर्शन संबंधी समस्याएं हो सकती हैं।


आइए एक कोड उदाहरण देखें:

 public sealed record Item( int Id, string Name, DateTime CreatedDateTimeUtc); // Put the filtering right in the foreach line by using .Where() from LINQ foreach (var item in collection.Where(x => x.Name == "Dev Leader")) { // we're only interested in the ID, so return it! return item.Id; }

साथ में चलाना

समानांतरीकरण एक और उन्नत तकनीक है जिसका उपयोग फ़ोरैच लूप के साथ किया जा सकता है। फ़ोरैच लूप को समानांतर करना मल्टी-कोर प्रोसेसर का लाभ उठाने का एक तरीका हो सकता है और प्रदर्शन में सुधार कर सकता है। समानांतर LINQ ऑपरेटर, PLINQ के उपयोग के माध्यम से समानांतरीकरण प्राप्त किया जा सकता है, जो पुनरावृत्ति प्रक्रिया को छोटे टुकड़ों में विभाजित कर सकता है और उन्हें अलग-अलग थ्रेड पर निष्पादित कर सकता है।


हम Parallel.Foreach , Parallel.ForeachAsync जैसी चीजों का भी उपयोग कर सकते हैं, और यहां तक कि Task.WhenAll() उपयोग करके काम को समर्पित कार्यों में विभाजित कर सकते हैं और परिणामों की प्रतीक्षा कर सकते हैं। इन विकल्पों को देखते समय कुछ प्रदर्शन अंतरों के लिए आपको इस वीडियो को देखने में रुचि हो सकती है!


फ़ोरैच लूप्स के साथ LINQ का उपयोग करना

LINQ, या लैंग्वेज इंटीग्रेटेड क्वेरी, C# में एक शक्तिशाली भाषा सुविधा है जो डेवलपर्स को विभिन्न डेटा स्रोतों के साथ अधिक अभिव्यंजक और कुशल तरीके से बातचीत करने की अनुमति देती है । फ़ोरैच लूप के साथ LINQ क्वेरीज़ का उपयोग करने की क्षमता कोड को सरल बना सकती है और जटिलता को कम कर सकती है, जिससे कोड अधिक पठनीय और रखरखाव योग्य हो जाता है।


फ़ोरैच लूप के साथ LINQ का उपयोग करने के लिए, क्वेरी को लूप के बाहर निष्पादित किया जाता है और एक वेरिएबल में सहेजा जाता है। फिर क्वेरी वेरिएबल को फ़ोरैच लूप का उपयोग करके पुनरावृत्त किया जाता है। सामान्य LINQ क्वेरीज़ में OrderBy शामिल है, जो डेटा को आरोही या अवरोही क्रम में सॉर्ट करता है, और Where() , जो एक विशिष्ट मानदंड को पूरा करने वाले आइटम का सबसेट लौटाता है। कस्टम LINQ क्वेरीज़ लिखना लैम्ब्डा एक्सप्रेशन का उपयोग करके किया जा सकता है, जिससे डेवलपर्स को सार्थक तरीकों से डेटा में हेरफेर करने की अनुमति मिलती है।


C# में फ़ोरैच लूप्स का उपयोग करने के लिए सर्वोत्तम अभ्यास

C# में फ़ोरैच लूप के साथ काम करते समय, ध्यान में रखने योग्य कई सर्वोत्तम प्रथाएँ हैं। इन प्रथाओं का पालन करके, डेवलपर्स यह सुनिश्चित कर सकते हैं कि उनका कोड कुशल और रखरखाव योग्य है, त्रुटियों से मुक्त है और उद्योग मानकों के अनुरूप है। कुछ सबसे महत्वपूर्ण सर्वोत्तम प्रथाओं पर नीचे चर्चा की गई है।

उपयुक्त डेटा प्रकार का चयन करना

पुनरावृत्त करने के लिए उपयुक्त डेटा प्रकार चुनना फ़ोरैच लूप के साथ काम करने के लिए एक महत्वपूर्ण सर्वोत्तम अभ्यास है। कुछ डेटा प्रकार, जैसे सूचियाँ और सरणियाँ, फ़ोरैच लूप के लिए अधिक उपयुक्त हैं, जबकि अन्य, जैसे हैश टेबल, उतने कुशल नहीं हो सकते हैं। पुनरावृत्त करने के लिए उपयुक्त डेटा प्रकार का चयन करते समय डेटा संरचना और संग्रहीत किए जा रहे डेटा के प्रकार दोनों पर विचार करना महत्वपूर्ण है।


डॉटनेट के हाल के संस्करणों में (लेखन के समय!), सरणियों और सूचियों के लिए कुछ अविश्वसनीय प्रदर्शन लाभ हुए हैं। ऐतिहासिक रूप से, एक इंडेक्सर वाले फॉर लूप की तुलना में फ़ोरैच लूप उतना परफॉर्मेंट नहीं रहा होगा। हालाँकि, डॉटनेट टीम ने कुछ जादू किया है! मैं अत्यधिक अनुशंसा करता हूं कि आप कुछ प्रदर्शन विवरणों के लिए यह वीडियो देखें :

जहां भी संभव हो, केवल पढ़ने योग्य संग्रहों का उपयोग करना

फ़ोरैच लूप के साथ काम करते समय जहां भी संभव हो, केवल पढ़ने योग्य संग्रह का उपयोग करना एक और महत्वपूर्ण सर्वोत्तम अभ्यास है। रीड-ओनली संग्रह पुनरावृत्ति प्रक्रिया के दौरान डेटा संरचना में संशोधन को रोकने में मदद कर सकता है, जिससे त्रुटियों का जोखिम कम हो जाता है। यदि संशोधन की आवश्यकता है, तो मूल को संशोधित करने के बजाय संग्रह की एक प्रति बनाना और प्रतिलिपि के साथ काम करना बेहतर है।


उन मुद्दों से लड़ना जहां गणना के दौरान संग्रह को संशोधित किया गया है, पूरी तरह से कष्टदायी है।

कोड को सरल रखना

कोड को सरल रखना और अनावश्यक जटिलता से बचना एक और सर्वोत्तम अभ्यास है जो समय बचा सकता है और त्रुटियों को कम कर सकता है। कोड को साफ़ और पढ़ने योग्य, स्पष्ट और तार्किक संरचना के साथ रखा जाना चाहिए जिसका पालन करना आसान हो। इसे वर्णनात्मक चर नामों का उपयोग करके और कोड को फ़ंक्शंस और कक्षाओं में समूहीकृत करके प्राप्त किया जा सकता है।


मैंने देखा है कि हम प्रोग्रामर के रूप में हमारे पास मौजूद कुछ LINQ विकल्पों पर ध्यान देने की प्रवृत्ति होती है। कभी-कभी इसका नतीजा यह होता है कि हमारे पास ये जटिल श्रृंखलाबद्ध LINQ क्वेरीज़ होती हैं जो कुछ अद्भुत काम करती हैं लेकिन... उन्हें पढ़ना मुश्किल होता है। डेटा को फ़िल्टर और हेरफेर करने का प्रयास करते समय बस इसे ध्यान में रखें।

समयपूर्व अनुकूलन से बचना

समय से पहले अनुकूलन से बचना फ़ोरैच लूप के साथ काम करने का एक और महत्वपूर्ण पहलू है। डेवलपर्स को इस बात की स्पष्ट समझ होने से पहले कि क्या अनुकूलित करने की आवश्यकता है, कोड को अनुकूलित करने से बचना चाहिए। कोड को बहुत जल्दी अनुकूलित करने से स्पष्टता की कमी हो सकती है और प्रतिगमन बग पैदा हो सकता है।


लेख में पहले समानतावाद के बारे में बिंदु याद हैं? यदि आप अभी शुरुआत कर रहे हैं... तो अभी उस चीज़ पर अपना समय बर्बाद न करें। बुनियादी बातों को समझो. अधिक उन्नत पहलुओं पर जाने से पहले एक ठोस आधार प्राप्त करें।

संक्षिप्त और वर्णनात्मक परिवर्तनीय नामों का उपयोग करना

फ़ोरैच लूप के साथ काम करते समय संक्षिप्त और वर्णनात्मक चर नामों का उपयोग करना एक और महत्वपूर्ण सर्वोत्तम अभ्यास है। वेरिएबल नाम संक्षिप्त और वर्णनात्मक होने चाहिए और वेरिएबल के उद्देश्य को प्रतिबिंबित करना चाहिए। इससे कोड पठनीयता में सुधार करने और कोड को समझने में आसान बनाने में मदद मिल सकती है।


क्या यह टिप फ़ोरैच लूप के लिए विशिष्ट है? कदापि नहीं। लेकिन प्रोग्रामिंग में यह इतना महत्वपूर्ण है कि मैं लोगों को पढ़ने योग्य कोड के महत्व के बारे में याद दिलाने के लिए इसे चुपचाप शामिल करने के तरीके ढूंढना जारी रखूंगा।

उचित त्रुटि-जाँच और अपवाद प्रबंधन

फ़ोरैच लूप के साथ काम करते समय उचित त्रुटि-जाँच और अपवाद प्रबंधन महत्वपूर्ण सर्वोत्तम अभ्यास हैं। त्रुटि-जांच को पूरे कोड में शामिल किया जाना चाहिए, खासकर संग्रह और सरणियों के साथ काम करते समय। पुनरावृत्ति प्रक्रिया के दौरान फेंके गए किसी भी अपवाद को ट्राई-कैच स्टेटमेंट का उपयोग करके सही ढंग से संभाला जाना चाहिए। यह प्रोग्राम क्रैश को रोकने और कोड रखरखाव में सुधार करने में मदद कर सकता है।


C# में फ़ोरैच लूप्स को रैपिंग करना

C# में फ़ोरैच लूप्स को समझना डेवलपर्स के लिए एक मौलिक कौशल है। फ़ोरैच लूप का उपयोग करके, आप समय बचा सकते हैं, साफ़ और अधिक संक्षिप्त कोड लिख सकते हैं, और पारंपरिक फ़ॉर लूप से जुड़े सामान्य नुकसान से बच सकते हैं। इस पूरे लेख में, मैंने C# में फ़ोरैच लूप्स के मूल सिंटैक्स, बचने के लिए सामान्य गलतियों, LINQ क्वेरीज़ और लैम्ब्डा जैसी उन्नत तकनीकों और फ़ोरैच लूप्स का उपयोग करने के सर्वोत्तम अभ्यासों को कवर किया है।


याद रखें कि पुनरावृत्ति के लिए हमेशा उपयुक्त डेटा प्रकार चुनें, जब भी संभव हो केवल पढ़ने योग्य संग्रह का उपयोग करें, और अपना कोड सरल और संक्षिप्त रखें। अभ्यास और अनुप्रयोग के साथ, आप C# में सबसे अधिक उपयोग किए जाने वाले टूल में से एक को लिखने में बेहतर हो सकते हैं।


मुझे आशा है कि आपको इस लेख में कुछ उपयोगी मिला होगा! यदि आप सीखने के अधिक अवसरों में रुचि रखते हैं, तो मेरे मुफ़्त साप्ताहिक न्यूज़लेटर की सदस्यता लें और !


यहाँ भी प्रकाशित किया गया