यह एक उदास सोमवार है, और आप काम पर हैं। हम सभी जानते हैं कि सोमवार कितना निराशाजनक हो सकता है, है न? आपका बॉस आपके पास आता है और कहता है, "अरे, मेरे पास सप्ताहांत में प्राप्त 300 बिना खोले गए ईमेल हैं। मैं चाहता हूँ कि आप हर एक को खोलें, प्रेषक का नाम लिखें, और काम पूरा होने के बाद ईमेल को हटा दें।"
यदि आप इसे मैन्युअली करने का प्रयास करते हैं तो यह कार्य बहुत थकाऊ लगता है। आपके दिमाग में अगली बात शायद यह होगी कि आप Google पर जाएं और ऐसे सॉफ़्टवेयर की तलाश करें जो इस प्रक्रिया को स्वचालित कर सके और आपके जीवन को आसान बना सके, है न?
खैर, प्रोग्रामिंग में भी ऐसी ही परिस्थितियाँ होती हैं। कई बार ऐसा होता है कि आपको तब तक दोहराए जाने वाले कार्य करने पड़ते हैं जब तक कि वे पूरे न हो जाएँ। आप इस समस्या का समाधान कैसे करते हैं? जावास्क्रिप्ट में, हमारे पास लूप्स होते हैं। लूप्स हमें कार्य को पूरा करने के लिए आवश्यक कोड की मात्रा को कम करके दोहराए जाने वाले कार्यों को हल करने की अनुमति देते हैं।
इस लेख में हम चर्चा करेंगे कि लूप क्या है, यह कैसे काम करता है, तथा इसे अपने प्रोग्राम में लागू करने के लिए हम कौन-कौन सी विभिन्न विधियां अपना सकते हैं।
जावास्क्रिप्ट में लूप का उपयोग बार-बार दोहराए जाने वाले कार्यों को आसानी से करने के लिए किया जाता है। वे एक शर्त पर आधारित होते हैं जो सत्य या असत्य लौटाता है।
शर्त एक अभिव्यक्ति है जिसे लूप को चालू रखने के लिए पास किया जाना चाहिए। जब निर्दिष्ट शर्तें सत्य मान लौटाती हैं तो लूप चलता है और जब वे गलत मान लौटाती हैं तो रुक जाता है।
लूप दोहराए जाने वाले कार्यों को करने के लिए उपयोगी होते हैं। उदाहरण के लिए, लूप का उपयोग करने से किसी समस्या को हल करने के लिए आवश्यक कोड छोटा हो जाता है। यह समय बचाता है, मेमोरी उपयोग को अनुकूलित करता है, और लचीलेपन में सुधार करता है।
लूप का असली महत्व कोड की लंबाई कम करने और दोहराव को सीमित करने से कहीं आगे तक फैला हुआ है। वे सरणी, ऑब्जेक्ट या अन्य संरचनाओं में डेटा के साथ काम करते समय भी मदद करते हैं। इसके अलावा, लूप दोहराव वाले कोड को कम करके और कोड की पुन: प्रयोज्यता को बढ़ाकर कोड मॉड्यूलरिटी को बढ़ावा देते हैं, जिससे ऐसे कोड बनाना संभव हो जाता है जिन्हें आपके प्रोजेक्ट के विभिन्न हिस्सों में इस्तेमाल किया जा सकता है।
लूप की दो प्रमुख श्रेणियां हैं: प्रवेश-नियंत्रित लूप और निकास-नियंत्रित लूप।
एंट्री-नियंत्रित लूप लूप के बॉडी को निष्पादित करने से पहले "लूप के प्रवेश द्वार" पर स्थिति का मूल्यांकन करते हैं। यदि स्थिति सत्य है, तो बॉडी चलती है। यदि नहीं, तो बॉडी नहीं चलती। for
और while
लूप एंट्री-नियंत्रित लूप के उदाहरण हैं।
एग्जिट-नियंत्रित लूप परीक्षण स्थिति पर लूप के बॉडी पर ध्यान केंद्रित करते हैं, यह सुनिश्चित करते हुए कि परीक्षण स्थिति का मूल्यांकन करने से पहले लूप के बॉडी को कम से कम एक बार निष्पादित किया जाता है। एग्जिट-नियंत्रित लूप का एक अच्छा उदाहरण do-while
लूप है।
आइये प्रवेश-नियंत्रित लूपों के कुछ उदाहरणों की जांच करें:
while
लूप का सिंटैक्स इस प्रकार है।
while (condition) { // loop's body }
निम्नलिखित सूची while लूप की कार्यक्षमता को समझाती है:
while
लूप कोष्ठक के अंदर परीक्षण स्थिति लेता है।
प्रोग्राम यह देखने के लिए स्थिति की जांच करता है कि यह पास हुआ या असफल।
जब तक शर्त पारित होती है, लूप के बॉडी के भीतर कोड निष्पादित होता है।
परीक्षण स्थिति विफल होने पर प्रोग्राम अपना संचालन समाप्त कर देता है।
नीचे, आइए while
लूप का एक व्यावहारिक उदाहरण लें:
let arr = []; let i = 1; let number = 5; while (i <= number) { arr.push(i) i++ } console.log(arr)
उपरोक्त कोड स्निपेट "arr", "i", और "num" चरों को आरंभीकृत करता है।
" arr " चर एक सारणी है जो परीक्षण शर्त को पास करने वाले मानों को रखती है।
"i" चर प्रत्येक पुनरावृत्ति के बाद प्रत्येक वृद्धि का ट्रैक रखता है।
"संख्या" चर प्रत्येक पुनरावृत्ति के बाद "i" के मान की तुलना उसके मान (5) से करता है।
लूप के मुख्य भाग में कोड प्रत्येक पुनरावृत्ति के बाद "i" के प्रत्येक मान को सारणी में धकेलता है, जब तक कि "i" "संख्या" से कम या उसके बराबर हो।
एक बार जब "i" का वर्तमान मान शर्त को पूरा नहीं कर पाता है, इस स्थिति में, जहां "i" का मान "संख्या" जो कि 6 है, से अधिक है, तो लूप चलना बंद हो जाता है।
push()
विधि एक अंतर्निहित जावास्क्रिप्ट फ़ंक्शन है जो किसी सारणी के अंत में एक नया आइटम जोड़ता है।
उत्पादन
[1, 2, 3, 4, 5]
do-while
लूप, while लूप से काफी मिलता-जुलता है; while
और do-while
लूप के बीच मुख्य अंतर यह है कि do-while
लूप, लूप की स्थिति का मूल्यांकन करने से पहले कम से कम एक बार कोड निष्पादन सुनिश्चित करता है; do-while
लूप का नीचे दिया गया सिंटैक्स है।
do { // loop's body } while (//condition)
do-while
एक एक्जिट-नियंत्रित लूप का एक बेहतरीन उदाहरण है। यह इस तथ्य में निहित है कि एक्जिट-नियंत्रित लूप परीक्षण स्थिति से पहले लूप के शरीर को प्राथमिकता देते हैं, अब आइए do-while
लूप का उपयोग करते हुए एक व्यावहारिक कोड उदाहरण पर गौर करें।
उदाहरण:
let i = 1; let num = 5; do { console.log(i); i++; } while (i <= num);
अब, आइए इस कोड स्निपेट को तोड़ें:
हमने "i" और "num" चरों को आरंभीकृत किया।
कंसोल लूप की स्थिति का मूल्यांकन करने से पहले "i" (1) का मान लॉग करता है।
शर्त की जाँच की जाती है, तथा प्रत्येक पुनरावृत्ति के बाद "i" का मान +1 से बढ़ जाता है।
जब "i" "num" से बड़ा हो जाता है तो लूप अपना संचालन समाप्त कर देता है।
उत्पादन
1 2 3 4 5
यद्यपि do-while
लूप, while
लूप से बहुत अधिक मिलता-जुलता है, फिर भी कुछ सूक्ष्म अंतर हैं जिन पर हमें ध्यान देना चाहिए; आइए एक और उदाहरण लेते हैं जो while
और do-while
लूप के बीच अंतर की तुलना करता है।
let i = 5; let num = 4 while( i < num) { console.log(i) }
उपरोक्त while
लूप कंसोल पर कोई परिणाम नहीं लौटाएगा; अब, ऐसा क्यों है?
हमने "i" और "num" चरों को क्रमशः 5 और 4 के मानों से आरंभ किया।
यह शर्त जाँचती है कि क्या "i" का मान "num" से कम है।
यदि सत्य है, तो यह प्रत्येक संबंधित मान को लॉग इन करता है।
चूँकि "i" का प्रारंभिक मान "num" से अधिक है, इसलिए लूप कभी नहीं चलता।
अब, आइए do-while
लूप के साथ एक समान उदाहरण लेते हैं।
let i = 5; let num = 4; do { console.log(i) } while ( i < num)
उत्पादन
5
do-while
लूप कोड ब्लॉक के निष्पादन को सुनिश्चित करता है, जो कंसोल में 5 लौटाता है, हालाँकि "i" का मान "num" से ज़्यादा है, फिर भी इसे कंसोल में एक बार लॉग किया जाता है। यह प्रतिनिधित्व आपको do-while
और while
लूप के बीच कार्यक्षमता में अंतर दिखाता है।
for loop
एक अनोखा प्रकार का लूप है और प्रोग्रामर द्वारा सबसे अधिक इस्तेमाल किए जाने वाले लूप में से एक है, for loop
एक ऐसा लूप है जो किसी शर्त के आधार पर एक कोड ब्लॉक को एक निश्चित संख्या में बार चलाता है। फॉर लूप का सिंटैक्स नीचे दिया गया है।
for (Expression1...; Expression2....; Expression3...{ //code block }
अभिव्यक्ति 1: for loop
के इस भाग को इनिशियलाइज़ेशन क्षेत्र के रूप में भी जाना जाता है; यह हमारे for loop
की शुरुआत है और वह क्षेत्र है जहाँ काउंटर वैरिएबल परिभाषित किया गया है। काउंटर वैरिएबल का उपयोग लूप के चलने की संख्या को ट्रैक करने और उसे मान के रूप में संग्रहीत करने के लिए किया जाता है।
अभिव्यक्ति 2: यह लूप का दूसरा भाग है; यह भाग सशर्त कथन को परिभाषित करता है जो लूप को निष्पादित करेगा।
अभिव्यक्ति 3: यह वह स्थान है जहां लूप समाप्त होता है; इस अनुभाग में काउंटर चर प्रत्येक पुनरावृत्ति के बाद शर्त में निर्दिष्ट मान को बढ़ाकर या घटाकर अपना मान अद्यतन करता है।
आइये फॉर लूप का उपयोग करके एक उदाहरण देखें।
for (let i = 0; i < 100; i++) { console.log("Hello World" ) }
उपरोक्त कोड स्निपेट से, आइए इसे एक साथ तोड़ें।
सबसे पहले, हमने काउंटर चर " i" को शून्य मान के साथ आरंभीकृत किया है।
इसके बाद, हमने सशर्त कथन बनाया है जो कोड को चालू रखेगा।
हमने "i" के मान की तुलना 100 से की; यदि यह परीक्षण पास हो जाता है, तो "Hello World" लॉग किया जाता है।
यह प्रक्रिया दोहराई जाती है जबकि प्रत्येक पुनरावृत्ति के बाद काउंटर +1 से बढ़ता है।
काउंटर का मान 100 तक पहुंचने पर लूप समाप्त हो जाता है।
उत्पादन
Hello World Hello World Hello World ... //repeated 97 more times making it 100 "Hello World" in total ...
for-each
लूप जावास्क्रिप्ट में एक विधि है जो एक सरणी के माध्यम से यात्रा करती है और उस सरणी में प्रत्येक तत्व पर एक कॉलबैक फ़ंक्शन लागू करती है; एक कॉलबैक फ़ंक्शन बस एक फ़ंक्शन में पैरामीटर के रूप में पारित किया गया एक और फ़ंक्शन है। कॉलबैक फ़ंक्शन मुख्य फ़ंक्शन के निष्पादन के बाद क्रमिक रूप से चलने के द्वारा काम करता है।
आइये for-each
लूप के मूल सिंटैक्स की जांच करें।
array.forEach(function(currentValue, index, arr))
ऊपर दिया गया कोड for-each
लूप की कार्यप्रणाली को समझाता है।
arr एक अन्य वैकल्पिक पैरामीटर है जो आपको बताता है कि तत्व किस सरणी से संबंधित है।
let myArray = [1, 2, 3, 4, 5]; array.forEach((num, index, arr) => { arr[index] = num * 2; console.log(array); });
आइये उपरोक्त उदाहरण को समझें:
हमने "myArray" नामक चर नाम से एक सारणी को आरंभीकृत किया तथा उसे 1 से 5 तक के पूर्णांकों के साथ संग्रहीत किया।
for-each
array विधि तीन पैरामीटर लेती है और array पर कॉलबैक फ़ंक्शन लागू करती है।
यह पंक्ति; arr[index] = num * 2
वर्तमान तत्व के मान को 2 से गुणा करती है और लौटाए गए मान को वर्तमान तत्व के सूचकांक में निर्दिष्ट करती है।
ध्यान दें: for-each
array विधि एक नई array नहीं लौटाती है; बल्कि, यह मूल array को संशोधित करती है और उसे लौटाती है।
उत्पादन
[2, 4, 6, 8, 10]
जब पुनरावृत्तीय ऑब्जेक्ट्स पर पुनरावृत्तीय करने की बात आती है तो for... in
और for... of
लूप बहुत उपयोगी होते हैं; पुनरावृत्तीय ऑब्जेक्ट्स किसी भी ऐसे तत्व को संदर्भित करते हैं जिस पर लूप किया जा सकता है, पुनरावृत्तीय ऑब्जेक्ट्स के सामान्य उदाहरण हैं सरणियाँ, स्ट्रिंग्स, सेट, आदि।
for... in
और for... of
में समान हैं कि वे वस्तुओं के माध्यम से कैसे पुनरावृति/स्थानांतरित होते हैं, उनके बीच मुख्य अंतर यह है कि वे किस प्रकार मान लौटाते हैं।
for... in
लूप तब उपयोगी होता है जब आपको किसी ऑब्जेक्ट से कुंजी(कुंजी)/गुण और पैरेंट ऑब्जेक्ट से उसके संगत गुण निकालने की आवश्यकता होती है। for... in
लूप कभी-कभी किसी ऑब्जेक्ट के माध्यम से उस तरीके से पुनरावृति कर सकता है जो उस विशेष ऑब्जेक्ट में परिभाषित किए गए तरीके से अलग होता है; आइए for... in
लूप इन एक्शन का एक उदाहरण लेते हैं।
let namesArray = []; const studentScores = { John: 60, Dan: 53, Tricia: 73, Jamal: 45, Jane: 52 } for(const name in studentScores){ namesArray.push(name); } console.log(namesArray);
ऊपर दिए गए उदाहरण में, हमने studentScores नामक एक ऑब्जेक्ट को परिभाषित किया है जिसमें कई छात्रों के नाम और उनके संबंधित स्कोर शामिल हैं। for... in
उपयोग करके, हम केवल छात्रों के नाम प्राप्त करने में सक्षम थे, जो ऑब्जेक्ट studentScores की कुंजियों का प्रतिनिधित्व करते हैं, और push()
विधि का उपयोग करके उन्हें एक सरणी में संग्रहीत करते हैं।
उत्पादन
["John", "Dan", "Tricia", "Jamal", "Jane"]
for... of
लूप एक विशेष प्रकार का लूप है जो पुनरावृत्त ऑब्जेक्ट्स जैसे कि एरे, स्ट्रिंग्स, मैप्स आदि के मानों पर पुनरावृत्त होता है, for... of
लूप्स किसी ऑब्जेक्ट की कुंजियों या गुणों से संबंधित नहीं होते हैं, बल्कि वे केवल मानों पर प्राथमिकताएं दर्शाते हैं।
for... of
लूप नियमित ऑब्जेक्ट पर पुनरावृति करने में असमर्थ है और चूंकि वे पुनरावृति योग्य नहीं हैं, इसलिए त्रुटि उत्पन्न होगी। आइए for.. of
लूप का उपयोग करके एक उदाहरण लेते हैं।
let numArray = [1,2,3,4,5] for (const value of numArray) { console.log(value) } // Output = 1,2,3,4,5
संक्षेप में, for... in
और for... of
लूप पुनरावृत्त ऑब्जेक्ट्स के माध्यम से लूप करने का एक शानदार तरीका है; मुख्य अंतर यह है for... in
लूप ऑब्जेक्ट की कुंजी लौटाता है जबकि for... of
लूप केवल पुनरावृत्त ऑब्जेक्ट्स के मान लौटाता है।
अनंत लूप से तात्पर्य ऐसे लूप से है जो अनिश्चित काल तक चलता रहता है; ऐसा तब होता है जब लूप में कोई निर्धारित निकास स्थिति नहीं होती है। अनंत लूप खतरनाक होते हैं क्योंकि वे आपके ब्राउज़र को क्रैश कर सकते हैं और आपके प्रोग्राम में अवांछित क्रियाएँ कर सकते हैं।
// infinite loop sample while (true) { console.log("keep on running") }
अपने प्रोग्राम में अनंत लूप को रोकने के लिए, हमेशा सुनिश्चित करें कि आपके लूप में एक निकास स्थिति परिभाषित है।
इस लेख के अंत तक पहुँचने के लिए आपका बहुत-बहुत धन्यवाद, जावास्क्रिप्ट में लूप एक महत्वपूर्ण अवधारणा है जिसे हर डेवलपर को मास्टर करने की आवश्यकता है क्योंकि यह एक अच्छा और अनुकूलन योग्य प्रोग्राम बनाने के लिए बहुत मूल्यवान है। मेरा मानना है कि इस लेख से आप अपने प्रोग्राम में लूप का उपयोग करने की मूल बातें और पेचीदगियों को समझ पाएंगे।