निश्चित समय जावास्क्रिप्ट के बाद आउटपुट लूप तत्व। जावास्क्रिप्ट में लूप्स। बयान जारी रखें और तोड़ें

लूप एक नियंत्रण निर्देश है जो आपको प्रोग्राम कोड के निष्पादन को एक निश्चित संख्या में दोहराने की अनुमति देता है। लूप बॉडी में निर्देशों के प्रत्येक व्यक्तिगत निष्पादन को पुनरावृत्ति कहा जाता है।

घुमाव के दौरान

जबकि लूप सिंटैक्स:

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

लूप कई बार कोड के ब्लॉक को निष्पादित कर सकते हैं। यदि आप एक ही कोड को बार-बार चलाना चाहते हैं, तो हर बार एक अलग मूल्य के साथ लूप आसान होते हैं। सरणियों के साथ काम करते समय अक्सर ऐसा होता है। लूप शुरू होने से पहले स्टेटमेंट 1 को निष्पादित किया जाता है। स्टेटमेंट 2 लूप शुरू करने की शर्त को परिभाषित करता है।

एक चक्र को बाधित करना और पुनः आरंभ करना

लूप निष्पादित होने के बाद हर बार स्टेटमेंट 3 को निष्पादित किया जाता है। ऊपर के उदाहरण से आप पढ़ सकते हैं। स्टेटमेंट 1 लूप शुरू होने से पहले वेरिएबल को सेट करता है। प्रत्येक बार लूप में कोड ब्लॉक निष्पादित होने पर स्टेटमेंट 3 मान को बढ़ाता है। आमतौर पर, आप लूप में इस्तेमाल किए गए वैरिएबल को इनिशियलाइज़ करने के लिए स्टेटमेंट 1 का इस्तेमाल करेंगे।

वारी = 0; मैं जबकि< 3) { // Выполнять код, пока значение переменной i меньше 3 alert("i: " + i); i++; // Увеличиваем значение переменной i }

करते-करते लूप

डू-जबकि लूप सिंटैक्स:


डू-जबकि लूप जैसा है घुमाव के दौरान, सिवाय इसके कि लूप निष्पादन स्थिति की जाँच पहले पुनरावृत्ति के बाद की जाती है, इससे पहले नहीं, और लूप अर्धविराम के साथ समाप्त होता है। चूंकि पुनरावृत्ति के बाद स्थिति की जाँच की जाती है, डू-लूप लूप के शरीर में कोड को हमेशा कम से कम एक बार निष्पादित किया जाता है:

आप कथन 1 में कई मान आरंभ कर सकते हैं। और आप कथन 1 को छोड़ सकते हैं। अक्सर, प्रारंभिक चर स्थिति का मूल्यांकन करने के लिए कथन 2 का उपयोग किया जाता है। यदि आप कथन 2 को छोड़ देते हैं, तो आपको लूप के अंदर एक ब्रेक प्रदान करना होगा। नहीं तो यह सिलसिला कभी खत्म नहीं होगा। इस पाठ के बाद के अध्याय में विराम के बारे में पढ़ें।

प्रवाह को नियंत्रित करने के लिए लेबल का उपयोग करना

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

वर गिनती = 0; करो (दस्तावेज़। लिखें (गिनती + ""); गिनती ++;) जबकि (गिनती< 5); Попробовать »

यह लूप तब उपयोगी हो सकता है जब लूप बॉडी में कोड को निष्पादन की स्थिति की परवाह किए बिना कम से कम एक बार निष्पादित किया जाना चाहिए।

पाश के लिए

लूप सिंटैक्स के लिए:


पर पाश के लिएअर्धविराम द्वारा अलग किए गए तीन भाव हैं। इन तीन अभिव्यक्तियों में निम्नलिखित निष्पादन आदेश हैं:

कार्यक्षमता, वास्तविकता का एक और प्रतिबिंब

ब्रेक का उपयोग करने और लेबल जारी रखने के तरीके को समझने के लिए हम दो अलग-अलग उदाहरण देखेंगे। टिप्पणी। साथ ही, लेबल नाम और संबद्ध लूप के बीच कोई अन्य कथन नहीं होना चाहिए। शॉर्टकट की बेहतर समझ के लिए निम्नलिखित दो उदाहरणों का प्रयास करें।

लूप के लिए कैसे काम करता है

"फॉर" लूप लूप का सबसे कॉम्पैक्ट रूप है। इसमें निम्नलिखित तीन महत्वपूर्ण भाग शामिल हैं। यदि स्थिति सही है, तो लूप के अंदर के कोड को निष्पादित किया जाएगा, अन्यथा नियंत्रण लूप से बाहर निकल जाएगा।

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

  1. पहली अभिव्यक्ति का मूल्यांकन हमेशा केवल एक बार किया जाता है - पहले पुनरावृत्ति से पहले। इसलिए, आमतौर पर पहली अभिव्यक्ति एक चर की परिभाषा है, जिसका उपयोग लूप निष्पादन स्थिति में काउंटर के रूप में किया जाता है।
  2. दूसरी अभिव्यक्ति लूप को निष्पादित करने की स्थिति को परिभाषित करती है। प्रत्येक पुनरावृत्ति से पहले इसका मूल्यांकन किया जाता है और यह निर्धारित करता है कि लूप के शरीर को निष्पादित किया जाएगा या नहीं। यदि एक्सप्रेशन सही मान का मूल्यांकन करता है, तो लूप बॉडी में कोड निष्पादित होता है। यदि गलत लौटाया जाता है, तो लूप समाप्त हो जाता है और नियंत्रण लूप के बाद अगले निर्देश पर चला जाता है। यदि पहली बार स्थिति की जाँच की जाती है, तो स्थिति गलत है, लूप बॉडी में कोड कभी भी निष्पादित नहीं किया जाएगा।
  3. प्रत्येक पुनरावृत्ति के बाद, तीसरी अभिव्यक्ति का मूल्यांकन किया जाता है। यह आमतौर पर लूप टेस्ट में उपयोग किए जाने वाले वेरिएबल के मान को बदलने के लिए उपयोग किया जाता है।

लूप उदाहरण के लिए:

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

  • किसी ब्लॉक से पहले, आप उस ब्लॉक से बाहर निकल सकते हैं।
  • सरणियों को पुनरावृत्त करने का पारंपरिक तरीका।
  • विरासत में मिली कुंजियों सहित संपत्ति कुंजियों पर पुनरावृति करें।
  • सरणियों के लिए उपयोग न करें।
  • यह सरणी अनुक्रमणिका और गुण कुंजियों पर पुनरावृति करता है।
  • तो जैसे ही कोई सरणी में संपत्ति जोड़ता है, वैसे ही समस्याएं होंगी।
हमने कहा कि लूप जैसी नियंत्रण संरचनाएं जटिलता पैदा करती हैं।

के लिए (var गिनती = 0; गिनती< 5; count++) document.write(count + " "); Попробовать »

जैसा कि आप उदाहरण से देख सकते हैं, लूप के लिए, अन्य लूपों के विपरीत, आपको लूप से जुड़े कोड को एक स्थान पर समूहित करने की अनुमति देता है।

लूप के लिए कोई भी भाव गायब हो सकता है, लेकिन अर्धविराम स्वयं मौजूद होना चाहिए, अन्यथा एक वाक्यविन्यास त्रुटि होगी। दूसरी अभिव्यक्ति की अनुपस्थिति में, लूप अनिश्चित काल तक चलेगा।

पूर्व शर्त के साथ लूप

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

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

वारी = 0; के लिए (; मैं< 4; i++) ... var i = 0; for (; i < 4;) ... for (var i = 1; /* нет условия */ ; i++) ... // Это эквивалентно следующему коду for (var i = 1; true; i++) ...

एक एक्सप्रेशन के बजाय, आप कई एक्सप्रेशन को कॉमा ऑपरेटर से अलग करके निर्दिष्ट कर सकते हैं।

// निष्पादित नहीं किया जाएगा क्योंकि कंडीशन चेक में अंतिम अभिव्यक्ति गलत है (i = 1; i .)< 4, false; i++) ... for (var i = 1, j = 5; i <= 5; i++, j--) document.write(i + " " + j +"
"); प्रयत्न "

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

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

फॉर-इन लूप

फॉर-इन लूप का उपयोग किसी ऑब्जेक्ट के एन्यूमरेटेड गुणों पर बेतरतीब ढंग से पुनरावृति करने के लिए किया जाता है और इसमें निम्नलिखित सिंटैक्स होता है:

(वस्तु में चर) कथन के लिए;

कीवर्ड के बाईं ओर चर का नाम है, जिसे स्ट्रिंग के रूप में लूप के प्रत्येक पुनरावृत्ति से पहले ऑब्जेक्ट के गुणों में से एक का नाम दिया जाता है। कीवर्ड के दाईं ओर एक ऑब्जेक्ट है जिसके गुण लूप द्वारा पुनरावृत्त किए जाएंगे। लूप तब तक चलेगा जब तक सभी उपलब्ध गुण पुनरावृत्त नहीं हो जाते। यदि वस्तु का प्रतिनिधित्व करने वाला चर शून्य या अपरिभाषित है, तो लूप कभी निष्पादित नहीं होगा:

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

पूर्व शर्त के साथ लूप करें

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

वर ओबीजे = (एक्स: 5, वाई: 10); के लिए (ओबीजे में वर प्रोप) (अलर्ट (प्रोप);)

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

लूप्स कई बार कुछ करने का एक आसान तरीका है। जावास्क्रिप्ट गाइड का यह अध्याय आपको जावास्क्रिप्ट में उपलब्ध विभिन्न ऑपरेटरों से परिचित कराएगा।

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

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

आप खेल के एक कम्प्यूटरीकृत संस्करण के रूप में चक्र के बारे में सोच सकते हैं जहां आप किसी को एक दिशा में एक्स कदम उठाने के लिए कहते हैं, फिर वाई दूसरे में कदम उठाते हैं; उदाहरण के लिए, "5 कदम पूर्व की ओर जाओ" खेल के विचार को एक लूप के रूप में व्यक्त किया जा सकता है:

वर्स्टेप; के लिए (चरण = 0; चरण< 5; step++) { // Запускается 5 раз, с шагом от 0 до 4. console.log("Идём 1 шаг на восток"); }

कई अलग-अलग प्रकार के लूप हैं, लेकिन वे सभी अनिवार्य रूप से एक ही काम करते हैं: वे कई बार कुछ क्रिया दोहराते हैं (शून्य पुनरावृत्ति समय के बारे में मत भूलना, सरणी में उलटी गिनती 0 से शुरू होती है)। विभिन्न संरचनाओं के लूप लूप की शुरुआत और अंत को निर्धारित करने के लिए अलग-अलग तरीके प्रदान करते हैं। विभिन्न प्रोग्रामिंग कार्यों के लिए, अपने स्वयं के लूप ऑपरेटर होते हैं, जिनकी मदद से उन्हें बहुत आसानी से हल किया जाता है।

मान लें कि हमारे पास हीरो ऑब्जेक्ट्स की एक सरणी है। हम सबसे मजबूत नायक खोजना चाहेंगे। यह सब कहा जा रहा है, यह कोड इतना बुरा नहीं है। हम अब तक के सबसे मजबूत नायक का अनुसरण करके लूप के आसपास पहुंचेंगे। तस्वीर देखने के लिए, आइए कल्पना करें कि हम भी सभी नायकों की कुल ताकत का पता लगाना चाहते थे।

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

जावास्क्रिप्ट में लूप व्यवस्थित करने के लिए ऑपरेटर।