Menu
Coddy logo textTech

Анонимные функции

Часть раздела Логика и управление потоком путешествия по Dart на Coddy — урок 44 из 65.

До сих пор вы создавали функции с такими именами, как calculateTotal или printMessage. Но иногда вам нужна простая функция для одной конкретной задачи, и давать ей имя кажется излишним. Вот здесь и пригодятся анонимные функции.

Анонимная функция — это функция без имени. Вы определяете её прямо там, где она вам нужна, что делает ваш код более лаконичным для коротких разовых операций. Синтаксис прост — вы просто пишете список параметров, за которым следует тело функции:

(parameter) {
  // тело функции
}

Анонимные функции особенно полезны при работе с методами списков. Например, вместо создания отдельной именованной функции для вывода каждого элемента списка, вы можете использовать анонимную функцию непосредственно с методом forEach:

List<String> fruits = ['apple', 'banana', 'orange'];
fruits.forEach((fruit) {
  print(fruit);
});

Этот подход позволяет сохранять ваш код чистым и лаконичным, особенно когда логика функции проста и не будет использоваться повторно в других частях вашей программы.

challenge icon

Задание

Легко

Создайте программу, которая обрабатывает список имен сотрудников с использованием анонимных функций. Ваша программа продемонстрирует, как использовать анонимные функции с методом forEach для выполнения различных операций над каждым элементом списка.

  1. Прочитайте строковый ввод, содержащий имена сотрудников, разделенные запятыми (например, "Alice,Bob,Charlie,Diana")
  2. Разделите входную строку на список отдельных имен, используя метод split()
  3. Используйте метод forEach с анонимной функцией, чтобы вывести имя каждого сотрудника с приветственным сообщением
  4. Используйте метод forEach с другой анонимной функцией, чтобы вывести имя каждого сотрудника в верхнем регистре
  5. Используйте метод forEach с третьей анонимной функцией, чтобы вывести имя каждого сотрудника вместе с количеством символов в нем

Например, если на вход подается "Alice,Bob,Charlie", ваша программа должна вывести:

Processing employee list: Alice,Bob,Charlie
===========================================
Welcome Messages:
Welcome to the team, Alice!
Welcome to the team, Bob!
Welcome to the team, Charlie!
===========================================
Names in Uppercase:
ALICE
BOB
CHARLIE
===========================================
Name Lengths:
Alice has 5 characters
Bob has 3 characters
Charlie has 7 characters

Если на вход подается "John,Sarah", ваша программа должна вывести:

Processing employee list: John,Sarah
===========================================
Welcome Messages:
Welcome to the team, John!
Welcome to the team, Sarah!
===========================================
Names in Uppercase:
JOHN
SARAH
===========================================
Name Lengths:
John has 4 characters
Sarah has 5 characters

Ваша программа должна использовать три отдельных вызова метода forEach, каждый со своей анонимной функцией. Анонимные функции должны быть определены встроенно (inline) без присвоения им имен. Каждая анонимная функция должна принимать один параметр, представляющий текущее имя сотрудника, и выполнять указанную операцию. Используйте интерполяцию строк для форматирования выходных сообщений точно так, как показано выше.

Шпаргалка

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

(parameter) {
  // тело функции
}

Анонимные функции особенно полезны с методами списков, такими как forEach:

List<String> fruits = ['apple', 'banana', 'orange'];
fruits.forEach((fruit) {
  print(fruit);
});

Такой подход позволяет сохранять код чистым и сфокусированным для простых разовых операций, которые не будут использоваться повторно в других местах.

Попробуйте сами

import 'dart:io';

void main() {
  // Чтение входной строки, содержащей имена сотрудников
  String? input = stdin.readLineSync();
  
  // Разделение входных данных на список имен
  List<String> employeeNames = input!.split(',');
  
  // Вывод начального сообщения о начале обработки
  print('Processing employee list: $input');
  print('===========================================');
  
  // TODO: Напишите свой код ниже
  // Используйте forEach с анонимными функциями, чтобы:
  // 1. Вывести приветственные сообщения
  // 2. Вывести имена в верхнем регистре  
  // 3. Вывести длину имен
  
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком