Anonyme Funktionen
Teil des Abschnitts Logik & Ablauf der Dart-Journey von Coddy — Lektion 44 von 65.
Bisher haben Sie Funktionen mit Namen wie calculateTotal oder printMessage erstellt. Aber manchmal benötigen Sie eine einfache Funktion für nur eine spezifische Aufgabe, und ihr einen Namen zu geben, fühlt sich unnötig an. Hier kommen anonyme Funktionen ins Spiel.
Eine anonyme Funktion ist eine Funktion ohne Namen. Sie definieren sie genau dort, wo Sie sie benötigen, was Ihren Code für kurze, einmalige Operationen prägnanter macht. Die Syntax ist unkompliziert – Sie schreiben einfach die Parameterliste, gefolgt vom Funktionskörper:
(parameter) {
// Funktionskörper
}Anonyme Funktionen sind besonders nützlich bei Listenmethoden. Anstatt beispielsweise eine separate benannte Funktion zu erstellen, um jedes Element in einer Liste auszugeben, können Sie eine anonyme Funktion direkt mit der forEach-Methode verwenden:
List<String> fruits = ['apple', 'banana', 'orange'];
fruits.forEach((fruit) {
print(fruit);
});Dieser Ansatz hält Ihren Code sauber und fokussiert, besonders wenn die Funktionslogik einfach ist und an keiner anderen Stelle in Ihrem Programm wiederverwendet wird.
Aufgabe
EinfachErstellen Sie ein Programm, das eine Liste von Mitarbeiternamen mithilfe von anonymen Funktionen verarbeitet. Ihr Programm soll demonstrieren, wie anonyme Funktionen mit der forEach-Methode verwendet werden, um verschiedene Operationen auf jedem Listenelement auszuführen.
- Lesen Sie eine String-Eingabe ein, die Mitarbeiternamen enthält, die durch Kommas getrennt sind (z. B.
"Alice,Bob,Charlie,Diana") - Teilen Sie den Eingabestring mithilfe der
split()-Methode in eine Liste einzelner Namen auf - Verwenden Sie die
forEach-Methode mit einer anonymen Funktion, um jeden Mitarbeiternamen mit einer Willkommensnachricht auszugeben - Verwenden Sie die
forEach-Methode mit einer weiteren anonymen Funktion, um jeden Mitarbeiternamen in Großbuchstaben auszugeben - Verwenden Sie die
forEach-Methode mit einer dritten anonymen Funktion, um jeden Mitarbeiternamen zusammen mit seiner Zeichenanzahl auszugeben
Wenn die Eingabe beispielsweise "Alice,Bob,Charlie" lautet, sollte Ihr Programm Folgendes ausgeben:
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 charactersWenn die Eingabe "John,Sarah" lautet, sollte Ihr Programm Folgendes ausgeben:
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 charactersIhr Programm muss drei separate forEach-Methodenaufrufe verwenden, jeder mit einer eigenen anonymen Funktion. Die anonymen Funktionen sollten inline definiert werden, ohne ihnen Namen zu geben. Jede anonyme Funktion sollte einen einzelnen Parameter entgegennehmen, der den aktuellen Mitarbeiternamen darstellt, und die angegebene Operation ausführen. Verwenden Sie String-Interpolation, um die Ausgabenachrichten exakt wie oben gezeigt zu formatieren.
Spickzettel
Eine anonyme Funktion ist eine Funktion ohne Namen, die genau dort definiert wird, wo sie benötigt wird. Die Syntax verwendet eine Parameterliste, gefolgt vom Funktionskörper:
(parameter) {
// Funktionskörper
}Anonyme Funktionen sind besonders nützlich bei Listenmethoden wie forEach:
List<String> fruits = ['apple', 'banana', 'orange'];
fruits.forEach((fruit) {
print(fruit);
});Dieser Ansatz hält den Code sauber und konzentriert auf einfache, einmalige Operationen, die an anderer Stelle nicht wiederverwendet werden.
Probier es selbst
import 'dart:io';
void main() {
// Liest den Eingabestring mit den Mitarbeiternamen
String? input = stdin.readLineSync();
// Teilt die Eingabe in eine Liste von Namen auf
List<String> employeeNames = input!.split(',');
// Gibt die erste Verarbeitungsnachricht aus
print('Processing employee list: $input');
print('===========================================');
// TODO: Schreibe deinen Code unten
// Verwende forEach mit anonymen Funktionen, um:
// 1. Willkommensnachrichten auszugeben
// 2. Namen in Großbuchstaben auszugeben
// 3. Namenslängen auszugeben
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablauf
1Fortgeschrittene Listenmanipulation
Listen-Eigenschaften: first & lastListen-Status: isEmpty & isNotEmptyEine Liste umkehrenHinzufügen zu einer Liste: insertElemente aus Liste entfernen: removeWhereSuchen in einer Liste: indexOfEine Liste sortierenEine Liste mischenZusammenfassung – Listen-Organizer4Fortgeschrittene Map-Manipulation
Über eine Map iterierenPrüfen auf Schlüssel und WerteMap-Eigenschaften: keys & valuesBedingtes Hinzufügen: putIfAbsentEinträge aus einer Map entfernenVerschachtelte MapsRückblick – Inventar-Update7Fortgeschrittene Funktionen
Anonyme FunktionenFunktionen als Argumente übergebenClosures verstehenEinführung in die RekursionRekursive Funktion: CountdownRekursive Funktion: FakultätZusammenfassung – List Processor10Abschluss-Herausforderungen
Herausforderung: NotensortiererHerausforderung: VokalzählerHerausforderung: FizzBuzz2Funktionale Listenoperationen
Transformieren mit 'map'Filtern mit 'where''.toList()' verwendenBedingungen prüfen mit 'any'Bedingungen mit 'every'Suchen mit 'firstWhere'Zusammenfassung – Datenfilterung3Sets
Was ist ein Set?Ein Set erstellenHinzufügen und Entfernen in SetsPrüfen auf Elemente in einem SetEine Liste in ein Set umwandelnSet-VereinigungSet-SchnittmengeSet-DifferenzRückblick – Einzigartige Gästeliste