0Pricing
Dart Academy · Урок

Функции высшего порядка и каррирование

Передавайте, возвращайте и частично применяйте функции

«Функции высшего порядка и каррирование» — бесплатный урок 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 — локальная установка не требуется.

Все уроки этого курса

  1. Функции высшего порядка и каррирование
  2. fold, reduce и expand
  3. Ленивые итерируемые объекты и генераторы с sync*
  4. Композиция конвейеров чистых функций
← Назад к Dart Academy