Цикл foreach

Цикл foreach — це оператор для обходу елементів у колекції. Foreach можна використовувати замість оператора циклу for. Однак, на відміну від циклу for, у циклах foreach зазвичай немає явного лічильника[1]: він виконує зазначені в тілі дії для кожного елемента в колекції, а не заздалегідь визначену кількість разів. В об'єктно-орієнтованих мовах ітератор, навіть якщо він неявний, часто використовується як засіб обходу.

Для перебору елементів у колекції майже завжди використовують цикли Foreach

Синтаксис оператора foreach може відрізнятися, залежно від мови програмування. Загалом він такий:

для кожного елемента колекції:    набір дій, які для поточнного елемента треба виконати

Мови програмування, котрі підтримують оператор foreach: ABC, ActionScript, Ada, C++11, C#, ColdFusion Markup Language (CFML), Cobra, D, Daplex[en], Delphi, ECMAScript, Erlang, Java (від версії 1.5), JavaScript, Lua, Objective-C (від версії 2.0), ParaSail, Perl, PHP, Prolog[2], Python, REALbasic, Rebol[3], Red[4], Ruby, Scala, Smalltalk, Swift, Tcl, tcsh, оболонки Unix, Visual Basic .NET і Windows PowerShell.

Цикл foreach у різних мовах

ActionScript 3.0

ActionScript підтримує стандарт ECMAScript 4.0[5] для for each .. in[6], котрий підставляє кожне зі значень замість value.

var foo:Object = {"apple":1,"orange":2};for each (var value:int in foo) { trace(value); }// returns "1" then "2"

ActionScript підтримує також for .. in[7], котрий підставляє кожен із ключів замість 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 Objend 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[8].

Офіційні джерела використовують для конструкції кілька назв. Її називають «розширеним циклом for» (англ. Enhanced for Loop)[8], «циклом For-Each»[9] і «оператором foreach»[10].

for (Type item : iterableCollection) {    // Do something to item}

JavaScript

Стандарт ECMAScript 6 має for..of для безіндексної ітерації по генераторах, масивах тощо:

for (var item of array){    // Do stuff}

Альтернативний функціональний стиль[11]:

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]

Примітки

🔥 Top keywords: Головна сторінкаЧемпіонат Європи з футболу 2024Спеціальна:ПошукВікіпедія:Культурна спадщина та видатні постаті (2024)Збірна України з футболуБріджертониЧемпіонат Європи з футболу 2020YouTubeУкраїнаЧемпіонат Європи з футболуЗбірна Румунії з футболуРебров Сергій СтаніславовичГлобальний саміт мируРадіо «Свобода»ДефолтРумуніяЛунін Андрій ОлексійовичНаціональна суспільна телерадіокомпанія УкраїниДень батькаДовбик Артем ОлександровичШевченко Андрій МиколайовичЯрмоленко Андрій МиколайовичЧемпіонат Європи з футболу 2024 (кваліфікаційний раунд)Мудрик Михайло Петрович138-ма зенітна ракетна бригада (Україна)FacebookЄрмак Андрій БорисовичСексВійськові звання України22-га окрема механізована бригада (Україна)Зінченко Олександр ВолодимировичТериторіальний центр комплектування та соціальної підтримкиДумками навиворіт 2Чемпіонат Європи з футболу 2016Список операторів систем розподілу України2024 у телебаченніMegogoСписок українських жіночих іменКиїв