Функции высшего порядка и каррирование
Передавайте, возвращайте и частично применяйте функции
«Функции высшего порядка и каррирование» — бесплатный урок Dart Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Dart Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Dart Academy содержит 4 уроков всего.
Функции — это значения
В Dart функция — это всего лишь значение, которое можно сохранить в переменной. Эта простая идея открывает весь мир функциональных шаблонов. 🎯
int square(int x) => x * x;
var op = square;
print(op(4)); // 16Что означает функция высшего порядка
Функция высшего порядка — это функция, которая принимает функцию в качестве аргумента или возвращает функцию. Вы уже использовали такие функции вместе с методами списков.
Передача функции
Передавая поведение в качестве аргумента, Вы позволяете вызывающему коду решать, что произойдёт. Здесь apply запускает полученную функцию.
int apply(int v, int Function(int) f) => f(v);
print(apply(5, (x) => x + 1)); // 6Синтаксис типа функции
Тип int Function(int) читается так: функция принимает значение типа int и возвращает значение типа int. Типы предельно ясно выражают Ваш замысел.
void run(String Function(String) format) {
print(format('hi'));
}Возврат функции
Функция высшего порядка также может возвращать функцию. Возвращённая функция помнит окружавшие её значения в момент создания.
Function makeAdder(int n) {
return (int x) => x + n;
}Использование возвращённой функции
Вызовите функцию-создатель один раз, чтобы создать специализированную функцию, а затем используйте её повторно. Каждый результат — это отдельный небольшой настроенный инструмент.
var add10 = makeAdder(10);
print(add10(5)); // 15
print(add10(1)); // 11Знакомство с каррированием
Каррирование превращает функцию с несколькими аргументами в цепочку функций с одним аргументом. Вы передаёте по одному значению за раз.
int Function(int) add(int a) => (int b) => a + b;
print(add(3)(4)); // 7Частичное применение
Зафиксируйте первый аргумент сейчас, а остальные передайте позже. Это частичное применение, позволяющее создавать повторно используемые помощники с заранее загруженными данными.
var add3 = add(3);
print(add3(10)); // 13
print(add3(20)); // 23Зачем нужно каррирование
Каррирование позволяет создавать специализированные функции из общих без переписывания логики. Особенно полезно оно при составлении небольших цепочек обработки.
Тип функции в качестве параметра
Сложные типы функций можно называть с помощью определения типа, чтобы сигнатуры оставались понятными во всём коде.
typedef IntOp = int Function(int);
int apply(int v, IntOp f) => f(v);Сокращённая передача метода
Вместо того чтобы оборачивать метод в лямбда-функцию, передайте его имя напрямую. Такой сокращённый способ передачи делает вызовы чистыми и аккуратными.
['1', '2', '3'].map(int.parse).forEach(print);Быстрая проверка
Проверим, насколько хорошо Вы поняли функции высшего порядка.
Итоги
Функции — это значения, поэтому их можно передавать и возвращать. Каррирование и частичное применение превращают общие функции в специализированные инструменты. Отличная работа! 🚀
Часто задаваемые вопросы
Урок «Функции высшего порядка и каррирование» бесплатный?
Да — полный текст урока «Функции высшего порядка и каррирование» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Dart Academy, подпишись на CoddyKit PRO. Курс Dart Academy содержит 4 уроков всего.
Чему я научусь в уроке «Функции высшего порядка и каррирование»?
Передавайте, возвращайте и частично применяйте функции Ты практикуешь Dart Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Dart Academy?
Предыдущий опыт не требуется. Dart Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Функции высшего порядка и каррирование»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Dart Academy?
Да. Каждый урок Dart Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Функции высшего порядка и каррирование
- fold, reduce и expand
- Ленивые итерируемые объекты и генераторы с sync*
- Композиция конвейеров чистых функций