Урок №7 - Замыкания. Полностью переработан
Так же как и предыдущие, замыкания подверглись дополнению. Раньше была ссылка на нужные секции карточки, но теперь - 4 раздела на 4.5-6 часов:
1. что такое замыкание
2. синтаксис
3. захват переменных
4. escaping vs non-escaping
Что внутри:
• Связь с предыдущими уроками - показал, что sorted { $0 < $1 }, filter { $0 > 3 }, reduce(0, +) из уроков 4-6 были замыканиями. А ты их уже знаешь, осталось понять механику.
• Функция vs замыкание - функция это рецепт в книге, замыкание это рецепт на салфетке. Одно с именем,а другое без. Именно сравнение из жизни и разжёвывание должно максимально приблизить к пониманию.
• 5 шагов сокращения - от полного синтаксиса { (a: Int, b: Int) -> Bool in return a < b } до { $0 < $1 }. Каждый шаг убирает одну вещь. Все пять записей рядом, одна под другой.
• Когда использовать $0, а когда имя - практическое правило. $0 * 2 понятно без объяснений. $0.firstName + $0.lastName + $0.age - уже нет. С примерами хорошего и плохого кода тебе станет понятно, ведь это крайне важно на проде - писать понятный код.
• Захват переменных - замыкание "складывает в рюкзак" переменные из окружения. По умолчанию по ссылке - видит изменения. А вот с capture list [x] - фиксирует копию. Важное правило, которое тебе очень сильно пригодится на собеседовании - один из частых практических примеров.
• Escaping vs non-escaping - гость на ужин и гость с ключом от дома. Да может-быть сложным, но полного понимания здесь и не требуется сейчас, достаточно запомнить правило @escaping всегда совмещать с weak.
• Проверь себя после каждого раздела - теоретические и практические задачи на закрепления разделов.
• Частые ошибки - 5 штук. Ожидание копии при захвате, а получил ссылку, $0 в сложных замыканиях, забытый in с именованными параметрами, путаница in и ->.
• 3 домашних задания - калькулятор операций с четырьмя замыканиями в переменных, цепочка filter + sorted + map на температурах, reduce для статистики оценок.
• График повторения - через 1 день напиши замыкание в полной и краткой форме. Через 3 дня - makeMultiplier с независимыми экземплярами. Через 10 - метод Фейнмана: объясни вслух, что значит "замыкание убежало из функции".
Замыкание - это одна из сложных тем для усвоения в начале, и это нормально, если нет 100% или даже 80% понимания. То, что ты запомнишь некоторые знания как правила, без понимания, всё-равно пойдут в плюс.
Практика, и чем больше тем лучше, в будущем - итоговый проект, позволят тебе ещё-раз вернуться к этой теме и лучше понять.
Если старую карточку уже прошёл - возвращаться не обязательно. Но если хочешь закрепить, пятое задание с merge и средним баллом - хорошая проверка.