Цикл foreach — це оператор для обходу елементів у колекції. Foreach
можна використовувати замість оператора циклу for. Однак, на відміну від циклу for
, у циклах foreach
зазвичай немає явного лічильника: він виконує зазначені в тілі дії для кожного елемента в колекції, а не заздалегідь визначену кількість разів. В об'єктно-орієнтованих мовах ітератор, навіть якщо він неявний, часто використовується як засіб обходу.
Синтаксис оператора foreach
може відрізнятися, залежно від мови програмування. Загалом він такий:
для кожного елемента колекції: набір дій, які для поточнного елемента треба виконати
Мови програмування, котрі підтримують оператор foreach
: ABC, ActionScript, Ada, , C#, ColdFusion Markup Language (CFML), Cobra, D, [en], Delphi, ECMAScript, Erlang, Java (від версії 1.5), JavaScript, Lua, Objective-C (від версії 2.0), ParaSail, Perl, PHP, Prolog, Python, REALbasic, Rebol, Red, Ruby, Scala, Smalltalk, Swift, Tcl, tcsh, оболонки Unix, Visual Basic .NET і Windows PowerShell.
Цикл foreach у різних мовах
ActionScript 3.0
ActionScript підтримує стандарт ECMAScript 4.0 для for each .. in
, котрий підставляє кожне зі значень замість value
.
var foo:Object = { "apple":1, "orange":2 }; for each (var value:int in foo) { trace(value); } // returns "1" then "2"
ActionScript підтримує також for .. in
, котрий підставляє кожен із ключів замість key
.
for (var key:String in foo) { trace(key); } // повертає спочатку "apple" , потім "orange"
Ada
Ada підтримує конструкцію foreach як частину циклу for. Нехай, X — це масив:
for I in X'Range loop X (I) := Get_Next_Element; end loop;
Цей синтаксис використовується переважно для масивів, але також буде працювати з іншими типами, коли потрібен повний обхід.
Ada 2012 має узагальнені цикли для повного обходу контейнерів будь-якого типу (масив, списки, карти…):
for Obj of X loop -- Work on Obj end loop;
C
Мова C не має колекцій або конструкції foreach. Однак вона має кілька стандартних структур даних, які можна використовувати як колекції, а foreach можна легко створити за допомогою макроса.
Однак виникають дві очевидні проблеми:
- Макрос оголошує нову змінну в існуючій області видимості, яка залишається після циклу.
- Не можна визначити один макрос foreach, який працює з різними типами колекцій (наприклад, масив і зв'язаний список) або який можна розширити для типів користувачів.
Приклад коду на С, що працює як foreach:
#include <stdio.h> /* foreach macro viewing a string as a collection of char values */ #define foreach(ptrvar, strvar) \ char* ptrvar; \ for (ptrvar = strvar; (*ptrvar) != '\0'; *ptrvar++) int main(int argc, char** argv) { char* s1 = "abcdefg"; char* s2 = "123456789"; foreach (p1, s1) { printf("loop 1: %c\n", *p1); } foreach (p2, s2) { printf("loop 2: %c\n", *p2); } return 0; }
C#
У C#, припускаючи, що myArray є масивом цілих чисел:
foreach (int x in myArray) { Console.WriteLine(x); }
C++
C++11 підтримує цикл foreach. Синтаксис схожий до мови Java:
#include <iostream> int main() { int myint[] = {1, 2, 3, 4, 5}; for (int i : myint) { std::cout << i << '\n'; } }
Java
У Java конструкція foreach з'явилася в Java Development Kit (JDK) 1.5.0 .
Офіційні джерела використовують для конструкції кілька назв. Її називають «розширеним циклом for» (англ. Enhanced for Loop), «циклом For-Each» і «оператором foreach».
for (Type item : iterableCollection) { // Do something to item }
JavaScript
Стандарт ECMAScript 6 має for..of
для безіндексної ітерації по генераторах, масивах тощо:
for (var item of array){ // Do stuff }
Альтернативний функціональний стиль:
array.forEach(item => { // Do stuff })
Для невпорядкованої ітерації за ключами в об'єкті JavaScript має цикл for...in
:
for (var key in object) { // Do stuff with object[key] }
Щоб обмежити ітерацію власними властивостями об'єкта, за винятком тих, які успадковуються через ланцюжок прототипів, іноді корисно додати тест hasOwnProperty(), якщо його підтримує рушій JavaScript.
for (var key in object) { if (object.hasOwnProperty(key)) { // Do stuff with object[key] } }
PHP
У мові програмування PHP конструкція foreach надає простий спосіб перебору масивів. foreach працює тільки з масивами та об'єктами, і генеруватиме помилку за спроби використання зі змінними інших типів або неініціалізованими змінними. Існує два види синтаксису:
1. З використанням лише значення:
foreach ($set as $value) { // Do something to $value; }
2. З використанням ключа та значення:
foreach ($set as $key => $value) { echo "{$key} has a value of {$value}"; }
Python
for item in iterable_collection: # Do something with item
Присвоєння кортежу Python, повністю доступне в його циклі foreach, також робить тривіальним перебір пар (ключ, значення) в асоціативних масивах[]:
for key, value in some_dict.items(): # Direct iteration on a dict iterates on its keys # Do stuff
Через те, що for ... in
є єдиним різновидом циклу for у Python, еквівалентом циклу з параметром є
for i in range(len(seq)): # Do something to seq[i]
Коректнішим для Python вважають використання функції enumerate
:
for i, item in enumerate(seq): # Do stuff with item # Possibly assign it back to seq[i]
Примітки
- D Programming Language
foreach
Statement Documentation. Digital Mars. Процитовано 4 серпня 2008. - SWI-Prolog -- foreach/2. www.swi-prolog.org. Процитовано 10 лютого 2020.
- http://www.rebol.com.
{{}}
: Пропущений або порожній|title=
() - http://www.red-lang.org.
{{}}
: Пропущений або порожній|title=
() - Proposed ECMAScript 4th Edition – Language Overview (PDF). Процитовано 21 лютого 2020.
- for each..in. Процитовано 21 лютого 2020.
- for..in. Процитовано 21 лютого 2020.
- "Enhanced for Loop - This new language construct[...]" Java Programming Language, Section: Enhancements in JDK 5. Sun Microsystems, Inc. 2004. Процитовано 26 травня 2009.
- "The For-Each Loop" The For-Each Loop. Sun Microsystems, Inc. 2008. Процитовано 10 травня 2009.
- "Implementing this interface allows an object to be the target of the "foreach" statement." Iterable (Java Platform SE 6). Sun Microsystems, Inc. 2004. Процитовано 12 травня 2009.
- Array.prototype.forEach() - JavaScript | MDN.
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Cikl foreach ce operator dlya obhodu elementiv u kolekciyi Foreach mozhna vikoristovuvati zamist operatora ciklu for Odnak na vidminu vid ciklu for u ciklah foreach zazvichaj nemaye yavnogo lichilnika vin vikonuye zaznacheni v tili diyi dlya kozhnogo elementa v kolekciyi a ne zazdalegid viznachenu kilkist raziv V ob yektno oriyentovanih movah iterator navit yaksho vin neyavnij chasto vikoristovuyetsya yak zasib obhodu Dlya pereboru elementiv u kolekciyi majzhe zavzhdi vikoristovuyut cikli Foreach Sintaksis operatora foreach mozhe vidriznyatisya zalezhno vid movi programuvannya Zagalom vin takij dlya kozhnogo elementa kolekciyi nabir dij yaki dlya potochnnogo elementa treba vikonati Movi programuvannya kotri pidtrimuyut operator foreach ABC ActionScript Ada C 11 C ColdFusion Markup Language CFML Cobra D en Delphi ECMAScript Erlang Java vid versiyi 1 5 JavaScript Lua Objective C vid versiyi 2 0 ParaSail Perl PHP Prolog Python REALbasic Rebol Red Ruby Scala Smalltalk Swift Tcl tcsh obolonki Unix Visual Basic NET i Windows PowerShell Cikl foreach u riznih movahActionScript 3 0 ActionScript pidtrimuye standart ECMAScript 4 0 dlya for each in kotrij pidstavlyaye kozhne zi znachen zamist value var foo Object apple 1 orange 2 for each var value int in foo trace value returns 1 then 2 ActionScript pidtrimuye takozh for in kotrij pidstavlyaye kozhen iz klyuchiv zamist key for var key String in foo trace key povertaye spochatku apple potim orange Ada Ada pidtrimuye konstrukciyu foreach yak chastinu ciklu for Nehaj X ce masiv for I in X Range loop X I Get Next Element end loop Cej sintaksis vikoristovuyetsya perevazhno dlya masiviv ale takozh bude pracyuvati z inshimi tipami koli potriben povnij obhid Ada 2012 maye uzagalneni cikli dlya povnogo obhodu kontejneriv bud yakogo tipu masiv spiski karti for Obj of X loop Work on Obj end loop C Mova C ne maye kolekcij abo konstrukciyi foreach Odnak vona maye kilka standartnih struktur danih yaki mozhna vikoristovuvati yak kolekciyi a foreach mozhna legko stvoriti za dopomogoyu makrosa Odnak vinikayut dvi ochevidni problemi Makros ogoloshuye novu zminnu v isnuyuchij oblasti vidimosti yaka zalishayetsya pislya ciklu Ne mozhna viznachiti odin makros foreach yakij pracyuye z riznimi tipami kolekcij napriklad masiv i zv yazanij spisok abo yakij mozhna rozshiriti dlya tipiv koristuvachiv Priklad kodu na S sho pracyuye yak foreach include lt stdio h gt foreach macro viewing a string as a collection of char values define foreach ptrvar strvar char ptrvar for ptrvar strvar ptrvar 0 ptrvar int main int argc char argv char s1 abcdefg char s2 123456789 foreach p1 s1 printf loop 1 c n p1 foreach p2 s2 printf loop 2 c n p2 return 0 C U C pripuskayuchi sho myArray ye masivom cilih chisel foreach int x in myArray Console WriteLine x C C 11 pidtrimuye cikl foreach Sintaksis shozhij do movi Java include lt iostream gt int main int myint 1 2 3 4 5 for int i myint std cout lt lt i lt lt n Java U Java konstrukciya foreach z yavilasya v Java Development Kit JDK 1 5 0 Oficijni dzherela vikoristovuyut dlya konstrukciyi kilka nazv Yiyi nazivayut rozshirenim ciklom for angl Enhanced for Loop ciklom For Each i operatorom foreach for Type item iterableCollection Do something to item JavaScript Standart ECMAScript 6 maye for of dlya bezindeksnoyi iteraciyi po generatorah masivah tosho for var item of array Do stuff Alternativnij funkcionalnij stil array forEach item gt Do stuff Dlya nevporyadkovanoyi iteraciyi za klyuchami v ob yekti JavaScript maye cikl for in for var key in object Do stuff with object key Shob obmezhiti iteraciyu vlasnimi vlastivostyami ob yekta za vinyatkom tih yaki uspadkovuyutsya cherez lancyuzhok prototipiv inodi korisno dodati test hasOwnProperty yaksho jogo pidtrimuye rushij JavaScript for var key in object if object hasOwnProperty key Do stuff with object key PHP U movi programuvannya PHP konstrukciya foreach nadaye prostij sposib pereboru masiviv foreach pracyuye tilki z masivami ta ob yektami i generuvatime pomilku za sprobi vikoristannya zi zminnimi inshih tipiv abo neinicializovanimi zminnimi Isnuye dva vidi sintaksisu 1 Z vikoristannyam lishe znachennya foreach set as value Do something to value 2 Z vikoristannyam klyucha ta znachennya foreach set as key gt value echo key has a value of value Python for item in iterable collection Do something with item Prisvoyennya kortezhu Python povnistyu dostupne v jogo cikli foreach takozh robit trivialnim perebir par klyuch znachennya v asociativnih masivah dzherelo for key value in some dict items Direct iteration on a dict iterates on its keys Do stuff Cherez te sho for in ye yedinim riznovidom ciklu for u Python ekvivalentom ciklu z parametrom yefor i in range len seq Do something to seq i Korektnishim dlya Python vvazhayut vikoristannya funkciyi enumerate for i item in enumerate seq Do stuff with item Possibly assign it back to seq i PrimitkiD Programming Language foreach Statement Documentation Digital Mars Procitovano 4 serpnya 2008 SWI Prolog foreach 2 www swi prolog org Procitovano 10 lyutogo 2020 http www rebol com a href wiki D0 A8 D0 B0 D0 B1 D0 BB D0 BE D0 BD Cite web title Shablon Cite web cite web a Propushenij abo porozhnij title dovidka http www red lang org a href wiki D0 A8 D0 B0 D0 B1 D0 BB D0 BE D0 BD Cite web title Shablon Cite web cite web a Propushenij abo porozhnij title dovidka Proposed ECMAScript 4th Edition Language Overview PDF Procitovano 21 lyutogo 2020 for each in Procitovano 21 lyutogo 2020 for in Procitovano 21 lyutogo 2020 Enhanced for Loop This new language construct Java Programming Language Section Enhancements in JDK 5 Sun Microsystems Inc 2004 Procitovano 26 travnya 2009 The For Each Loop The For Each Loop Sun Microsystems Inc 2008 Procitovano 10 travnya 2009 Implementing this interface allows an object to be the target of the foreach statement Iterable Java Platform SE 6 Sun Microsystems Inc 2004 Procitovano 12 travnya 2009 Array prototype forEach JavaScript MDN