फ़ोरैच लूप



कंप्यूटर प्रोग्रामिंग में, फ़ोरैच लूप (या प्रत्येक लूप के लिए) एक संग्रह वर्ग में आइटमों को पार करने के लिए एक नियंत्रण प्रवाह विवरण है। फॉरएच(foreach) का प्रयोग आमतौर पर मानक के स्थान पर किया जाता है for लूप स्टेटमेंट (कंप्यूटर विज्ञान)। दूसरे के विपरीत for लूप निर्माण, तथापि, foreach लूप्स आम तौर पर कोई स्पष्ट काउंटर नहीं रखते: वे अनिवार्य रूप से कहते हैं कि ऐसा करने के बजाय इस सेट में हर चीज के साथ ऐसा करें x बार. यह संभावित ऑफ-बाय-वन त्रुटियों से बचाता है और कोड को पढ़ने में आसान बनाता है। वस्तु के उन्मुख  भाषाओं में, एक पुनरावर्तक, भले ही अंतर्निहित हो, अक्सर ट्रैवर्सल के साधन के रूप में उपयोग किया जाता है। वह foreach कुछ भाषाओं में कथन में कुछ परिभाषित क्रम होता है, जो संग्रह में प्रत्येक आइटम को पहले से आखिरी तक संसाधित करता है। वह foreachकई अन्य भाषाओं में, विशेष रूप से सरणी प्रोग्रामिंग भाषाओं में, कथन का कोई विशेष क्रम नहीं होता है। यह सामान्य रूप से लूप अनुकूलन को सरल बनाता है और विशेष रूप से संग्रह में वस्तुओं के वेक्टर प्रसंस्करण को समवर्ती रूप से अनुमति देता है।

सिंटेक्स
भाषाओं के बीच वाक्य-विन्यास भिन्न-भिन्न होता है। अधिकांश सरल शब्द का प्रयोग करते हैं, मोटे तौर पर इस प्रकार है: for each item in collection: do something to item

भाषा समर्थन
प्रोग्रामिंग भाषाएं जो फ़ोरैच लूप का समर्थन करती हैं उनमें एबीC (प्रोग्रामिंग भाषा), ActionScript, एडा (प्रोग्रामिंग भाषा), C++11, C शार्प (प्रोग्रामिंग भाषा)|C#, कोल्डफ्यूजन मार्कअप लैंग्वेज (Cएफएमएल), कोबरा (प्रोग्रामिंग भाषा), डी (प्रोग्रामिंग भाषा) भाषा), डैप्लेक्स (क्वेरी भाषा),  डेल्फ़ी (सॉफ़्टवेयर) , ईCएमएस्क्रिप्ट, एरलांग (प्रोग्रामिंग भाषा), जावा (प्रोग्रामिंग भाषा) (1.5 से), जावास्क्रिप्ट, लुआ (प्रोग्रामिंग भाषा),  उद्देश्य C (2.0 से), पैरासेल (प्रोग्रामिंग भाषा), पर्ल, पीएचपी, प्रोलॉग, पायथन (प्रोग्रामिंग भाषा), आर (प्रोग्रामिंग भाषा),  वास्तविक बुनियादी , रीबोल (प्रोग्रामिंग भाषा), लाल (प्रोग्रामिंग भाषा), रूबी (प्रोग्रामिंग भाषा), स्काला (प्रोग्रामिंग भाषा), स्मॉलटॉक, स्विफ्ट (प्रोग्रामिंग भाषा),  [[टी.C.एल ]], टीCएसएच,  यूनिक्स शैल , विजुअल बेसिक .NET, और  विंडोज़ पॉवरशेल । फ़ोरैच के बिना उल्लेखनीय भाषाएँ C (प्रोग्रामिंग भाषा), और C++ प्री-C++11 हैं।

एक्शनस्क्रिप्ट 3.0
एक्शनस्क्रिप्ट ईCएमएस्क्रिप्ट 4.0 मानक का समर्थन करता है के लिए जो प्रत्येक सूचकांक पर मूल्य खींचता है।

यह भी सपोर्ट करता है जो प्रत्येक सूचकांक पर कुंजी खींचता है।

वहाँ
है

Ada (प्रोग्रामिंग भाषा) सामान्य for लूप के भाग के रूप में foreach लूप का समर्थन करता है। कहें कि X एक ऐरे डेटा संरचना है:

इस सिंटैक्स का उपयोग ज्यादातर सरणियों पर किया जाता है, लेकिन पूर्ण पुनरावृत्ति की आवश्यकता होने पर यह अन्य प्रकारों के साथ भी काम करेगा।

एडीए 2012 ने किC भी प्रकार के कंटेनर (सरणी, सूचियां, मानचित्र ...) पर फ़ोरैच लूप के लिए लूप को सामान्यीकृत किया है:

C
C (प्रोग्रामिंग भाषा) भाषा में संग्रह या फ़ोरैच निर्माण नहीं है। हालाँकि, इसमें कई मानक डेटा संरचनाएँ हैं जिनका उपयोग संग्रह के रूप में किया जा सकता है, और फ़ोरैच को C मैक्रो के साथ आसानी से बनाया जा सकता है।

हालाँकि, दो स्पष्ट समस्याएँ उत्पन्न होती हैं:
 * मैक्रो अस्वच्छ है: यह मौजूदा दायरे में एक नया वैरिएबल घोषित करता है जो लूप के बाद भी बना रहता है।
 * एक फ़ोरैच मैक्रो को परिभाषित नहीं किया जा सकता है जो विभिन्न संग्रह प्रकारों (उदाहरण के लिए, सरणी और लिंक की गई सूची) के साथ काम करता है या जो उपयोगकर्ता प्रकारों के लिए विस्तार योग्य है।

चार के संग्रह के रूप में C स्ट्रिंग

C int सारणी int के संग्रह के रूप में (सरणी का आकार संकलन-समय पर ज्ञात होता है)

सबसे सामान्य: संग्रह के रूप में स्ट्रिंग या सरणी (रन-टाइम पर ज्ञात संग्रह आकार)
 * टिप्पणी: idxtype को हटाया जा सकता है और  इसके स्थान पर जीएनयू कंपाइलर संग्रह के साथ प्रयोग किया गया

C#
C# में, यह मानते हुए कि myArray पूर्णांकों की एक सरणी है:

लैंग्वेज इंटीग्रेटेड क्वेरी (LINQ) एक प्रतिनिधि (CLI) या लैम्ब्डा (प्रोग्रामिंग) को स्वीकार करते हुए निम्नलिखित सिंटैक्स प्रदान करती है:

C++
C++11 एक फ़ोरैच लूप प्रदान करता है। सिंटैक्स फ़ोरैच लूप#जावा के समान है:

कथनों के लिए C++11 रेंज-आधारित को GNU कंपाइलर कलेक्शन (GCC) (संस्करण 4.6 से), बजना (संस्करण 3.0 से) और विज़ुअल C++ 2012 (संस्करण 11) में लागू किया गया है। )

रेंज आधारित  वाक्यात्मक शर्करा इसके समतुल्य है:

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

Qt (सॉफ़्टवेयर), एक C++ फ़्रेमवर्क, फ़ोरैच लूप प्रदान करने वाला एक मैक्रो प्रदान करता है एसटीएल इटरेटर इंटरफ़ेस का उपयोग करना:

बूस्ट (C++ लाइब्रेरीज़), मुफ़्त पीयर-रिव्यू पोर्टेबल C++ लाइब्रेरीज़ का एक सेट फ़ोरैच लूप भी प्रदान करता है:

C++/Cएलआई
C++/CLI भाषा C# के समान एक निर्माण का प्रस्ताव करती है।

यह मानते हुए कि myArray पूर्णांकों की एक सरणी है:

 प्रत्येक के लिए (myArray में int x) { कंसोल::राइटलाइन(x); } 

टैग सिंटैक्स
Cएफएमएल इस निर्माण में सूचकांक के रूप में मूल्य की गलत पहचान करता है;  वेरिएबल को सरणी तत्व का वास्तविक मान प्राप्त होता है, न कि उसका सूचकांक।

सामान्य लिस्प
कॉमन लिस्प डोलिस्ट मैक्रो के साथ फ़ोरैच क्षमता प्रदान करता है: या अधिक डेटा प्रकारों पर पुनरावृति करने के लिए शक्तिशाली लूप मैक्रो और यहां तक ​​कि मैपकार फ़ंक्शन के साथ भी:

डी
या

ऑब्जेक्ट पास्कल, डेल्फ़ी
फ़ोरैच समर्थन डेल्फ़ी (प्रोग्रामिंग भाषा) 2005 में जोड़ा गया था, और एक एन्यूमरेटर वैरिएबल का उपयोग करता है जिसे var अनुभाग में घोषित किया जाना चाहिए।

एफिल
एफिल (प्रोग्रामिंग भाषा) लूप निर्माण का पुनरावृत्ति (foreach) रूप कीवर्ड  द्वारा प्रस्तुत किया गया है।

इस उदाहरण में, संरचना का प्रत्येक तत्व  मुद्रित है:

स्थानीय इकाई  लाइब्रेरी क्लास का एक उदाहरण है. कर्सर की विशेषता  प्रत्येक संरचना तत्व तक पहुंच प्रदान करता है। वर्ग के वंशज   विशेष पुनरावृत्ति एल्गोरिदम को संभालने के लिए बनाया जा सकता है। वस्तुओं के प्रकार जिन्हें पुनरावृत्त किया जा सकता है (  उदाहरण में) उन कक्षाओं पर आधारित हैं जो लाइब्रेरी कक्षा से प्राप्त होती हैं.

एफिल लूप के पुनरावृत्ति रूप का उपयोग कीवर्ड के समय बूलियन अभिव्यक्ति के रूप में भी किया जा सकता है  या तो द्वारा प्रतिस्थापित किया जाता है   (सार्वभौमिक परिमाणीकरण को प्रभावित करना) या   (अस्तित्व संबंधी परिमाणीकरण को प्रभावित करना)।

यह पुनरावृत्ति एक बूलियन अभिव्यक्ति है जो सभी आइटमों के लिए सत्य है  जिनकी संख्या तीन से अधिक है:

यदि कम से कम एक आइटम की संख्या तीन से अधिक है तो निम्नलिखित सत्य है:

जाओ
गो (प्रोग्रामिंग भाषा) के फ़ोरैच लूप का उपयोग किC सरणी, स्लाइस, स्ट्रिंग, मैप या चैनल पर लूप करने के लिए किया जा सकता है।

दो-मूल्य वाले फॉर्म का उपयोग करके, हमें सूचकांक/कुंजी (पहला तत्व) और मान (दूसरा तत्व) मिलता है: एक-मान प्रपत्र का उपयोग करके, हमें सूचकांक/कुंजी (पहला तत्व) मिलता है:

ग्रूवी
ग्रूवी (प्रोग्रामिंग भाषा) सरणियों, सूचियों और श्रेणियों जैसे संग्रहों पर लूप का समर्थन करती है:

ग्रूवी एक ऐरे इंडेक्स के साथ लूप के लिए C-स्टाइल का भी समर्थन करता है:

ग्रूवी में संग्रहों को प्रत्येक कीवर्ड का उपयोग करके भी दोहराया जा सकता है और एक समापन. डिफ़ॉल्ट रूप से, लूप डमी को इसका नाम दिया गया है

हास्केल
हास्केल (प्रोग्रामिंग भाषा) मोनाड (कार्यात्मक प्रोग्रामिंग) क्रियाओं का उपयोग करके सूचियों पर लूपिंग की अनुमति देता है  और   (  इसके तर्क फ़्लिप के साथ) Control.Monad से:

उन कार्यों को मोनैड और किC भी डेटा संरचना के बजाय एप्लिकेटिव फ़ैक्टर्स पर काम करने के लिए सामान्यीकृत करना भी संभव है, जिसका उपयोग करके ट्रैवर्स किया जा सकता है।  (  इसके तर्क फ़्लिप किए गए) और   (  इसके तर्क फ़्लिप के साथ) Data.Traversable से।

जावा
जावा (प्रोग्रामिंग भाषा) में, जावा डेवलपमेंट किट (जेडीके) 1.5.0 में एक फ़ोरैच-कंस्ट्रक्ट पेश किया गया था। आधिकारिक स्रोत निर्माण के लिए कई नामों का उपयोग करते हैं। इसे एन्हांस्ड फॉर लूप के रूप में जाना जाता है, प्रत्येक लूप के लिए, और फ़ोरैच कथन।

जावा 8 के बाद से जावा स्ट्रीम एपीआई भी प्रदान करता है:

जावास्क्रिप्ट
ईCएमएस्क्रिप्ट 6 मानक है  जनरेटर, सरणियों और अधिक पर सूचकांक-रहित पुनरावृत्ति के लिए: वैकल्पिक रूप से, फ़ंक्शन-आधारित शैली:

किC ऑब्जेक्ट में कुंजियों पर अव्यवस्थित पुनरावृत्ति के लिए, जावास्क्रिप्ट की सुविधा है  कुंडली:

ऑब्जेक्ट के स्वयं के गुणों की पुनरावृत्ति को Cमित करने के लिए, प्रोटोटाइप श्रृंखला के माध्यम से विरासत में मिले गुणों को छोड़कर, कभी-कभी hasOwnProperty परीक्षण जोड़ना उपयोगी होता है, यदि जावास्क्रिप्ट इंजन द्वारा समर्थित है (WebKit/Safari के लिए, इसका मतलब संस्करण 3 या बाद में है).

ईCएमएस्क्रिप्ट 5 ने किC ऑब्जेक्ट की स्वयं की कुंजियों को सरणी में स्थानांतरित करने के लिए ऑब्जेक्ट.कीज़ विधि प्रदान की।

=== दूसरा ===

केवल संख्यात्मक सूचकांक मानों के माध्यम से पुनरावृति करें: सभी सूचकांक मानों के माध्यम से पुनरावृति करें:

गणित
गणित में,  किC भी मूल्य को लौटाए बिना, सूची के प्रत्येक तत्व के लिए बस एक अभिव्यक्ति का मूल्यांकन करेगा।

इसका प्रयोग अधिक सामान्य है, जो प्रत्येक मूल्यांकन का परिणाम एक नई सूची में लौटाता है।

पुदीना
प्रत्येक लूप के लिए मिंट में निम्नलिखित सिंटैक्स का समर्थन किया जाता है:

ई>या  अनंत लूप मिंट में प्रत्येक लूप के लिए और एक अनंत सेट का उपयोग करके लिखा जा सकता है।

उद्देश्य-C
फ़ोरैच लूप्स, जिन्हें ऑब्जेक्टिव-C#फ़ास्ट एन्यूमरेशन कहा जाता है, ऑब्जेक्टिव-C 2.0 में शुरू होने पर समर्थित हैं। उनका उपयोग किC भी ऑब्जेक्ट पर पुनरावृति करने के लिए किया जा सकता है जो NSFastEnumeration प्रोटोकॉल को लागू करता है, जिसमें NSArray, NSDictionary (कुंजी पर पुनरावृत्त), NSSet, आदि शामिल हैं।

NSArrays अपने सदस्यों को एक संदेश भी प्रसारित कर सकता है:

जहां ब्लॉक (C भाषा एक्सटेंशन) उपलब्ध हैं, एक एनएसएआरएआरई स्वचालित रूप से प्रत्येक निहित आइटम पर एक ब्लॉक निष्पादित कर सकता है:

पुनरावृत्त किए जा रहे संग्रह का प्रकार प्रत्येक पुनरावृत्ति के साथ लौटाए गए आइटम को निर्धारित करेगा। उदाहरण के लिए:

ओकैमल
OCaml एक कार्यात्मक भाषा है। इस प्रकार, फ़ोरैच लूप के समतुल्य को सूचियों और सरणियों पर लाइब्रेरी फ़ंक्शन के रूप में प्राप्त किया जा सकता है।

सूचियों के लिए:

या संक्षेप में:

सरणियों के लिए:

या संक्षेप में:

पैरासेल
पैरासेल (प्रोग्रामिंग भाषा) समानांतर प्रोग्रामिंग भाषा कई प्रकार के पुनरावर्तकों का समर्थन करती है, जिसमें एक कंटेनर पर प्रत्येक पुनरावर्तक के लिए एक सामान्य शामिल है:

पैरासेल इटरेटर्स पर फ़िल्टर और मानचित्र की कुंजी और मान दोनों को संदर्भित करने की क्षमता का भी समर्थन करता है। यहां My_Map के तत्वों पर आगे की पुनरावृत्ति दी गई है, केवल उन तत्वों का चयन करें जहां कुंजी My_Set में हैं:

पास्कल
पास्कल (प्रोग्रामिंग भाषा) में, आईएसओ मानक 10206:1990 ने पास्कल (प्रोग्रामिंग भाषा)#सेट प्रकारों पर पुनरावृत्ति की शुरुआत की, इस प्रकार:

पर्ल
पर्ल में, किC सूची के तत्वों को पार करने के लिए foreach (जो छोटे for के बराबर है) का उपयोग किया जा सकता है। अभिव्यक्ति जो संग्रह को लूप करने के लिए दर्शाती है, उसका मूल्यांकन सूची-संदर्भ में किया जाता है और परिणामी सूची के प्रत्येक आइटम को, बदले में, लूप वैरिएबल के रूप में उपनाम दिया जाता है।

शाब्दिक उदाहरण सूचीबद्ध करें:

सरणी उदाहरण:

हैश उदाहरण:

संग्रह सदस्यों का प्रत्यक्ष संशोधन:

पीएचपी
वैकल्पिक सिंटैक्स का उपयोग करके कुंजी और मान दोनों को निकालना भी संभव है:

संग्रह सदस्यों का प्रत्यक्ष संशोधन:


 * अधिक जानकारी

पायथन
पायथन का टपल असाइनमेंट, जो इसके फ़ोरैच लूप में पूरी तरह से उपलब्ध है, सहयोगी सरणियों में (कुंजी, मान) जोड़े पर पुनरावृति करना भी आसान बनाता है:

जैसा  पायथन में फॉर लूप का एकमात्र प्रकार है, अन्य भाषाओं में पाए जाने वाले काउंटर लूप के बराबर है...

...हालांकि का उपयोग कर रहे हैं  फ़ंक्शन को अधिक पाइथोनिक माना जाता है:

आर
जैसा  का एकमात्र प्रकार है   आर में लूप, अन्य भाषाओं में पाए जाने वाले काउंटर लूप के बराबर है...

रैकेट
या पारंपरिक योजना का उपयोग कर रहे हैं  समारोह:

एक एक-तर्क वाला कार्य है।

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

शाब्दिक उदाहरण सूचीबद्ध करें:

 1..4 के लिए { ।कहना; } 

सरणी उदाहरण:

 @arr के लिए { ।कहना; } 

इसके कथन संशोधक रूप में लूप के लिए:

 .@arr के लिए कहें; 

 @arr के लिए -> $x { $x कहो; } 

 @arr के लिए -> $x, $y { # एक समय में एक से अधिक आइटम $x, $y कहें; } 

हैश उदाहरण:

 कुंजियों के लिए %हैश -> $कुंजी { $key कहें: $hash{$key} ; } 

या

 %hash.kv के लिए -> $कुंजी, $मूल्य { $key कहें: $value ; } 

या

 %हैश के लिए -> $x { $x.key कहें: $x.value ; # कोष्ठक को दोहरे उद्धृत स्ट्रिंग में इनलाइन करने की आवश्यकता है } 

दोहरे नुकीले ब्लॉक के साथ संग्रह सदस्यों का प्रत्यक्ष संशोधन, <->:

 मेरा @arr = 1,2,3; @arr के लिए <-> $x { $x *=2; } 
 * 1) अब @arr = 2,4,6;

रूबी
या

इसका उपयोग हैश के साथ भी किया जा सकता है.

जंग
ई> लूप की संरचना है. यह स्पष्ट रूप से को कॉल करता है अभिव्यक्ति पर विधि, और परिणामी मूल्य का उपयोग करता है, जिसे लागू करना होगा प्रवृत्ति। यदि अभिव्यक्ति स्वयं एक पुनरावर्तक है, तो इसका उपयोग Cधे द्वारा किया जाता है  कार्यान्वयन के माध्यम से लूप करें   सभी के लिए  s जो पुनरावर्तक को अपरिवर्तित लौटाता है। लूप कॉल करता है   लूप बॉडी को निष्पादित करने से पहले इटरेटर पर विधि। अगर   रिटर्न , अंदर का मान पैटर्न मिलान को सौंपा गया है और लूप बॉडी निष्पादित की गई है; अगर यह वापस आता है  , लूप समाप्त हो गया है।

योजना
एक एक-तर्क वाला कार्य है।

स्विफ्ट
स्विफ्ट (प्रोग्रामिंग भाषा) का उपयोग करता है …  एक संग्रह के सदस्यों पर पुनरावृति करने के लिए निर्माण करें।

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

SystemVerilog
SystemVerilog किC भी आयामीता के किC भी वेक्टर या सरणी प्रकार पर पुनरावृत्ति का समर्थन करता है  कीवर्ड.

एक तुच्छ उदाहरण पूर्णांकों की एक सरणी पर पुनरावृत्त होता है:

एक अधिक जटिल उदाहरण पूर्णांकों की सरणियों की एक साहचर्य सरणी पर पुनरावृत्त होता है:

टीCएल
Tcl सूचियों को पुनरावृत्त करने के लिए foreach का उपयोग करता है। एक से अधिक पुनरावर्तक चर निर्दिष्ट करना संभव है, जिस स्थिति में उन्हें सूची से अनुक्रमिक मान निर्दिष्ट किए जाते हैं। एक से अधिक सूचियों को एक साथ दोहराना भी संभव है। निम्नांकित में  पहली सूची के अनुक्रमिक मूल्यों को मानता है,   दूसरी सूची के अनुक्रमिक मान:

विजुअल बेसिक .NET
या बिना प्रकार के अनुमान के

पारंपरिक कमांड प्रोसेसर
एक काल्पनिक आह्वान करें  तीन बार आदेश दें, हर बार इसे एक रंग का नाम दें।

विंडोज पॉवरशेल
एक पाइपलाइन से

यह भी देखें

 * while लूप करें
 * पाश के लिए
 * घुमाव के दौरान
 * मानचित्र (उच्च-क्रम फ़ंक्शन)

संदर्भ
Цикл просмотра