March 25

Используйте анонимные функции в качестве аргументов

Анонимные функции (лямбды) — это мощный инструмент Dart, который позволяет передавать логику как аргумент другим функциям. Они делают код короче, выразительнее и удобнее для работы с коллекциями.

В этой статье разберём:
Что такое анонимные функции и зачем они нужны
Как передавать их в методы (forEach, map, where, reduce)
Практические примеры использования в реальных задачах


1. Что такое анонимная функция?

Анонимная функция — это функция без имени, которая определяется прямо в месте использования. Её можно:

  • Передавать как аргумент другой функции
  • Присваивать переменной
  • Вызывать сразу после создания

🔹 Простой пример:

void main() {
  // Анонимная функция, переданная в forEach
  [1, 2, 3].forEach((number) {
    print(number * 2);
  });
}

Вывод:

2
4
6

2. Передача анонимных функций в методы

🔸 forEach — выполнение действия для каждого элемента

final fruits = ['apple', 'banana', 'orange'];

// Анонимная функция печатает каждый элемент в верхнем регистре
fruits.forEach((fruit) => print(fruit.toUpperCase()));

Вывод:

APPLE
BANANA
ORANGE

🔸 map — преобразование элементов

dart

final numbers = [1, 2, 3];

// Возводим каждый элемент в квадрат
final squares = numbers.map((n) => n * n).toList();
print(squares); // [1, 4, 9]

🔸 where — фильтрация элементов

final ages = [18, 25, 12, 30, 15];

// Оставляем только совершеннолетних
final adults = ages.where((age) => age >= 18).toList();
print(adults); // [18, 25, 30]

🔸 reduce — агрегация элементов

final prices = [100, 200, 300];

// Суммируем все значения
final total = prices.reduce((sum, price) => sum + price);
print(total); // 600

3. Анонимные функции как аргументы других функций

Вы можете создавать свои функции, которые принимают анонимные функции в качестве параметров.

🔹 Пример: функция applyOperation

void applyOperation(int a, int b, int Function(int, int) operation) {
  final result = operation(a, b);
  print("Результат: $result");
}

void main() {
  // Передаём анонимную функцию сложения
  applyOperation(5, 3, (x, y) => x + y); // Результат: 8

  // Передаём анонимную функцию умножения
  applyOperation(5, 3, (x, y) => x * y); // Результат: 15
}

4. Типизация анонимных функций

Dart позволяет явно указывать тип функции, чтобы избежать ошибок.

🔹 Пример: функция transformText

String transformText(String input, String Function(String) processor) {
  return processor(input);
}

void main() {
  // Делаем текст заглавными буквами
  final upperText = transformText("hello", (text) => text.toUpperCase());
  print(upperText); // HELLO

  // Добавляем восклицательный знак
  final excitedText = transformText("Dart", (text) => "$text!");
  print(excitedText); // Dart!
}

5. Заключение

Анонимные функции экономят код — не нужно объявлять отдельные методы.
Делают код гибким — можно передавать разную логику в одни и те же функции.
Улучшают читаемость — особенно в map, where, reduce.

Попробуйте сами! Перепишите свой код с анонимными функциями и убедитесь, насколько это удобно. 🚀

задача: отфильтровать чётные числа и удвоить их
final nums = [1, 2, 3, 4, 5];
final result = nums
.where((n) => n.isEven)
.map((n) => n * 2)
.toList();
print(result); // [4, 8]

🔥 Теперь вы знаете, как эффективно использовать анонимные функции в Dart!