Функции в PHP способны на большее! В этом курсе вы познакомитесь с такими понятиями, как объекты первого рода, лямбда-функции и функции высшего порядка. Научитесь передавать и принимать неограниченное число аргументов, изучите операции «отображение», «фильтрация» и «агрегация». Познакомитесь со сторонними библиотеками, значительно упрощающими работу программиста.
Чему вы научитесь:
- Использовать продвинутые возможности функций для написания лаконичного и эффективного кода
- Отделять чистые функции от функций с побочными эффектами
- Использовать функции высшего порядка (map/filter/reduce) для обработка коллекций
- Отличать императивную парадигму программирования от декларативной (функциональной)
Уроки курса
-
2
Чистые функции
Познакомиться с понятиями «детерминированность» и «побочные эффекты» (side effects). -
6
Полезные функции для работы с коллекциями
Познакомиться со сторонними библиотеками и некоторыми функциями из них.упражнение
-
7
Объекты первого класса
Посмотреть на функции, как на данные. Познакомиться с анонимными функциями. -
13
Полезные функции высшего порядка
Познакомиться с новыми функциями сторонних библиотек.упражнение
-
15
Парадигмы программирования
Познакомиться с понятием "парадигма" и рассмотреть отличия императивной и декларативной парадигм. -
16
Абстракция с помощью функций
Обобщить знания о функциях и познакомиться с понятием абстракции
Испытания
Это практические задания, которые мы советуем выполнить после завершения курса. Задания помогут вам получить дополнительный опыт в программировании и закрепить полученные навыки.
# | Задание | % завершений |
---|---|---|
1 | Поиск ближайшего соседа | 90% |
2 | Одинаковая четность | 97% |
3 | NRZI кодирование | 88% |
4 | Фильтр анаграмм | 91% |
5 | Конвертер цветов | 93% |
6 | IP конвертер | 86% |
7 | Горизонтальная гистограмма | 85% |
8 | Вертикальная гистограмма | 77% |
9 | Валидатор IPv6 | 68% |
10 | Столбчатая диаграмма | 88% |
11 | Теория вероятности | 90% |
Автор
Сооснователь и CEO образовательного проекта Хекслет. Программирую с 2007 года. За это время прошёл путь от разработчика до технического директора и управляющего отдельным подразделением (филиалом). Управлял командами, в которых больше 50 разработчиков.
- Программирую на языках: Elixir, Clojure, JavaScript, PHP, Ruby.
- Соорганизатор конференции Nastachku.ru.
- Вимер.
- Топлю за DevOps и автоматизированные тесты.
Впечатления
Классная задачка для подведения итогов и раскладывания по полкам :)
Просидел.. ., попыхтел.. .,просматривал и разбирал примеры из теории, иногда запускал некоторые из примеров в repl.it, где-то для меня было так удобнее и в чём-то помогало. Как в некоторых случаях помогал просмотр файла с тестами, там бывает можно натолкнуться на мысль о решении, каким оно должно выглядеть, ну это к примеру.
Пробовал и еще раз пробовал, вникал и наконец-то решил. Конечно, не так элегантно и лаконично как решение учителя. Решение учителя включает в себя всё трио, пройденных трёх функций, красиво применена и array_filter, и array_map в итоге возврат нужного результата из array_reduce, просто красота! Эх.. . Я же в своём решении всё "скармил" одной мощной array_reduce, понятно, что внутри получилось много проверок - if-ов, возможно и "лишних" присвоений, не очень красивых retur-ов :) . Вобщем такой олдскульный хардкор:)
Когда начинаешь понемногу вникать и доходить до принципов устройства и работы этих чУдесных:) функций: array_map, array_filter, array_reduce , то раскладывается всё по-полочкам. По-началу пытаешься как бы "уловить", где там цикл "зашит", потому что привык уже и чувствуешь что вот он работает, а его явно не видно:) и как-будто чего-то не хватает:).
В array_reduce не совсем привычны действия с аккумулятором, вроде бы прочитаешь теорию и просмотришь примеры и кажется, да и понятно, в общем и в целом, но потом на практике есть свои моменты, нюансы и нужно разбираться, как говорится: "Мелочи - это не пустяки! И мелочи в мелочах - вовсе не мелочи!". Это особенно применимо к программированию!
[?] Такой вот вопрос с аккумулирующим в себе итоговое значение, как взаимосвязаны в решении учителя массив $acc, который подаётся первым аргументом в нашу анонимную функцию и 3-тий параметр - пустой массив [] в array_reduce ? Пустой массив $acc , наполняется в цикле внутри анонимной функции с учётом всех тех условий, прописанных в теле функции. То есть каждую итерацию идёт заполнение изначально пустого - $acc , по окончанию цикла, далее наполненный $acc возвращается уже из нашей анонимной функции - return $acc , то есть вот он у нас собственно есть return результирующего нужного нам массива, а какую роль играет тут 3-тий аргумент array_reduce? Это просто показать, что возвращаться будет массив - [] ? Ведь по сути агрегируется $acc , а как $acc связан с 3-им аргументом - []. Вобщем не совсем понятна что-ли роль этого 3-его аргумента агрегатора в array_reduce и вообще это похоже как итоговый(2-ой возврат) из функции - вернули наш результирующий массив $acc, к тому еще из array_reduce вернули 3-тий аргумент - [] ? Представляется что-то такое.)
// removed