Используйте анонимные функции в качестве аргументов
Анонимные функции (лямбды) — это мощный инструмент 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 — преобразование элементов
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!