[Moscow.pm] map vs foreach

Ivan Petrov i.petro.77.00 на gmail.com
Ср Ноя 25 01:31:10 PST 2015


> Приветствую, коллеги!

> Есть  вполне опредленная задача  - взять массив произвольного размера и что-то
> однотипное сделать с его элементами.
> Можно это сделать вида:

> foreach(@array) {
> do_something($_)
> }

> а можно

> map { do_something($_) } @array

> Вторая запись мне нравится больше, т.к.  она более лаконична и более очевидно
> возвращается массив измененных элементов.

> Вопрос в том,  какие есть подводные камни  второго метода и какой из методов
> быстрее и оптимальнее по памяти (обрабатывается большое количество текста в
> каждом элементе)

> Все что я нашел в выдаче гугла и в монастыре - суть набор холиворов.
> Может кто-то здесь обладает сакральным знанием?

мне кажется тут вопрос более идеологический:

 map - из мира функционального программирования
 for - из обычного мира

соответственно map хорошо использовать там где вы собираете какие-то
списки на основании списков + не модифицируете по ходу движения то что
собираете.
если программисты будут что-то менять оптимизировать в map, то
используя map именно как хрень из функционального программирования, вы
скорее всего никогда не нарветесь на неприятности

for в общем виде заточен и на то что вы можете делать

for (@ary) {
    $_ = что-то там
}

в том что map тут будет вести себя так же и сейчас и в будущем
гарантий нет.
кроме всего прочего map по логике будет иметь больший оверхед, ибо на
каждую итерацию вызывается функция. Да этот вызов облегченный но все
же это вызов функции. Плюс сбор результатов


Подробная информация о списке рассылки Moscow-pm