Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «У чому різниця між зовнішнім і внутрішнім ітератором?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**Зовнішній** і **внутрішній** ітератори відрізняються тим, *хто керує процесом обходу колекції* - клієнт чи сама колекція. **Ключове:** зовнішній ітератор - вибір, коли потрібен контроль і гнучкість, внутрішній - коли важлива простота і безпека.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення**Зовнішній** і **внутрішній** ітератори відрізняються тим, *хто керує процесом обходу колекції* - клієнт чи сама колекція. --- ### 1. **Зовнішній ітератор (External Iterator)** #### Суть Клієнт **сам керує** ходом ітерації - вручну запитує елементи в ітератора. Це найпоширеніший варіант (наприклад, `Iterator` у Java, `for...of` у Python). #### Приклад (Java) ```java Iterator<String> it = list.iterator(); while (it.hasNext()) { System.out.println(it.next()); } ``` Клієнт вирішує, коли переходити до наступного елемента, коли зупинитися, і що робити між кроками. #### Переваги - Повний **контроль над процесом обходу**. - Можна перервати, пропустити елементи, об'єднувати декілька ітерацій. - Легко реалізувати **вкладені обходи** або фільтрацію в коді. #### Недоліки - Клієнт змушений **сам писати цикл** і стежити за станом ітератора. - Можливі помилки (наприклад, виклик `next()` без перевірки `hasNext()`). --- ### 2. **Внутрішній ітератор (Internal Iterator)** #### Суть Колекція **сама керує** обходом - клієнт просто передає дію (функцію, лямбду), яку потрібно виконати для кожного елемента. #### Приклад (Java) ```java list.forEach(item -> System.out.println(item)); ``` Тут колекція сама перебирає всі елементи і викликає передану функцію. #### Переваги - Код чистіший - немає ручних циклів. - Безпечніше: клієнт не може порушити послідовність обходу. - Підходить для паралельних і потокових API (наприклад, `stream().forEach()` у Java). #### Недоліки - Менше контролю: не можна перервати обхід або змішати декілька ітерацій. - Неможливо вкласти один внутрішній ітератор в інший без додаткових хитрощів. --- ### **Порівняння** | Характеристика | Зовнішній ітератор | Внутрішній ітератор | |---|---|---| | Хто керує ітерацією | Клієнт | Колекція | | Гнучкість | Висока | Низька | | Простота використання | Нижча | Вища | | Можливість переривання | Так | Обмежена | | Приклад у Java | `Iterator`, `while (it.hasNext())` | `forEach`, `Stream.forEach()` | --- ### **Висновок** - **Зовнішній ітератор** - вибір, коли потрібні **контроль і гнучкість** (наприклад, умовна обробка, зупинка). - **Внутрішній ітератор** - коли важлива **простота і безпека** (наприклад, обробка всіх елементів підряд). **Підсумок:** > Зовнішній ітератор "видає елементи на вимогу клієнта", > а внутрішній - "сам керує обходом і лише викликає клієнтський код".Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.