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