Ответ
Анонимные функции (лямбда-функции или лямбда-выражения) в Dart — это функции без имени, объявляемые непосредственно в месте использования. Они особенно полезны для коротких операций, передаваемых в качестве аргументов (коллбэков) в методы коллекций, виджетов или таймеров.
Основные особенности:
- Не имеют имени, объявляются через
(параметры) { тело }или стрелочный синтаксис(параметры) => выражение. - Имеют доступ к переменным из окружающей лексической области видимости (замыкание).
- Часто используются с
forEach,map,where,reduce,Future.then,GestureDetector.onTapи другими API.
Примеры использования:
void main() {
// Пример 1: Анонимная функция как аргумент forEach
var numbers = [1, 2, 3];
numbers.forEach((number) {
print(number * 2);
});
// Пример 2: Стрелочный синтаксис для однострочных выражений
var doubled = numbers.map((n) => n * 2).toList();
print(doubled); // [2, 4, 6]
// Пример 3: Сохранение в переменную
var greet = (String name) => 'Hello, $name!';
print(greet('Flutter')); // Hello, Flutter!
// Пример 4: Использование в Flutter-виджете (коллбэк)
// ElevatedButton(
// onPressed: () { // Анонимная функция
// print('Button pressed!');
// },
// child: Text('Press me'),
// )
}
Использование анонимных функций делает код более компактным и локализует логику, которая не требует отдельного именованного объявления.
Ответ 18+ 🔞
Э, слушай, вот тебе про эти самые анонимные функции в Dart. Представь, что функция — это как работяга, которого ты нанимаешь на разовую работу. Так вот, зачем ему паспорт с именем, если он тут один раз кирпич поднимет и всё? Вот это и есть лямбда — безымянный работяга, который появляется прямо на месте, делает своё дело и растворяется в коде. Удобно, блядь, до безобразия.
Что за зверь такой:
- Имени нет, ёпта. Объявляется прямо так:
(параметры) { тело }. Если дело простое, в одну строчку, можно стрелочный синтаксис:(параметры) => выражение. Красота! - Видит всё вокруг. У него есть доступ к переменным из той области, где его объявили. Это называется замыкание — звучит умно, а на деле просто хитрая жопа, которая всё подглядывает.
- Куда его только не суют. Особенно любят его пихать в методы для списков (
forEach,map,where), в обработчики будущих результатов (Future.then) или, что самое частое, в коллбэки виджетов во Flutter. Нажал на кнопку — сработала анонимная функция, которую ты туда воткнул.
Смотри, как это выглядит в деле:
void main() {
// Пример 1: Отправили анонимку поработать в forEach
var numbers = [1, 2, 3];
numbers.forEach((number) {
print(number * 2); // Каждый элемент умножает на два и выводит
});
// Пример 2: Стрелочный синтаксис — для быстрых парней
var doubled = numbers.map((n) => n * 2).toList(); // Всё то же самое, но короче
print(doubled); // [2, 4, 6]
// Пример 3: Можешь даже присвоить её переменной, как будто имя дал
var greet = (String name) => 'Hello, $name!';
print(greet('Flutter')); // Hello, Flutter! — работает же!
// Пример 4: Классика жанра — кнопка во Flutter
// ElevatedButton(
// onPressed: () { // Смотри, анонимка прямо здесь!
// print('Button pressed!'); // Нажали — выполнилось
// },
// child: Text('Press me'),
// )
}
Вот и вся магия. Вместо того чтобы объявлять целую именованную функцию где-то в другом конце файла, ты пишешь логику прямо там, где она нужна. Код становится компактнее, читается легче — просто ебушки-воробушки, а не программирование. Главное — не переборщи, а то можно так налямбдить, что потом сам от своего кода охуеешь. Всё должно быть в меру.