ragnar_ok
@ragnar_ok

Применимы ли генераторы для переиспользования кода?

Известно, что генераторы нужны для оптимизации потребления памяти при обработке больших массивов. А если использовать генератор, чтобы придерживаться DRY?

В моем коде требуется несколько раз переиспользовать foreach вложенный в foreach. Чтобы избежать дублирования написал простой генератор. В этом контексте использование генератора оптимально? Или можно при помощи нативных функций php избежать такого дублирования?

function generate(array $array, string $key): Generator
{
    foreach ($array as $item) {
        if (empty($item[$key]) || !is_array($item[$key])) {
            continue;
        }

        foreach ($item[$key] as $value) {
            yield $value;
        }
    }
}


sandbox.onlinephpfunctions.com/code/64de77be858114...
  • Вопрос задан
  • 148 просмотров
Решения вопроса 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Для провторного использования кода генераторы как раз подходят.
В частности, они позволяют использовать полиморфизм, в едином интерфейсе обращаться как к изначально итерируемым ресурсам, так и к потокам.

А вот "для оптимизации потребления памяти" генераторы не подходят от слова "совсем".
Я не в первый раз уже вижу на Тостере эту чушь, и очень хотел бы знать, кто эту идиотскую мульку здесь запустил.

Синтаксический сахар, которым, по сути, является генератор, никогда никакого отношения к потреблению ресурсов не имеет.
Ресурсы всегда экономит (или не экономит) тот код, который мы заворачиваем в генератор. Но сам он вообще не при делах. Всё, что "наэкономит" генератор, можно сэкономить и без него.

"Большой массив" уже сожрал кучу памяти, и экономить тут уже нечего. Поздно пить Боржоми, когда почки отказали.
Память экономит получение данных из внешнего источника не целиком, а по одному элементу
А генератор всего лишь может замаскировать такое получение под работу с массивом.

В моем коде требуется несколько раз переиспользовать foreach вложенный в foreach.


Скорее всего генератор здесь будет бессмысленным.
Чтобы понять, насколько здесь нужна какая-либо оптимизация, надо привести ИСХОДНЫЙ код, про который вдруг в голову ударила идея что его надо обязательно "оптимизировать"
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
26 апр. 2024, в 10:43
1500 руб./за проект
26 апр. 2024, в 10:21
1200 руб./в час