Skip to content

Kapitel 10: Funktionen fortgeschritten

10.1 Funktionsdefinition und -aufruf

dart
// Grundlegende Funktion
int add(int a, int b) {
  return a + b;
}

void main() {
  print(add(1, 2));  // 3
}

10.2 Funktionsparametertypen

Erforderliche Parameter

dart
void gruß(String name) {
  print('Hallo ' + name);
}

Optionale Positionsparameter

dart
void gruß([String? name, int alter = 0]) {
  print('Hallo ' + (name ?? 'Gast') + ', Alter: ' + alter.toString());
}

void main() {
  gruß();  // Hallo Gast, Alter: 0
  gruß('Alice');  // Hallo Alice, Alter: 0
  gruß('Bob', 25);  // Hallo Bob, Alter: 25
}

Optionale Benannte Parameter

dart
void gruß({String? name, int alter = 0}) {
  print('Hallo ' + (name ?? 'Gast') + ', Alter: ' + alter.toString());
}

void main() {
  gruß();  // Hallo Gast, Alter: 0
  gruß(name: 'Alice');  // Hallo Alice, Alter: 0
  gruß(alter: 25, name: 'Bob');  // Hallo Bob, Alter: 25
}

10.3 Anonyme Funktionen

dart
void main() {
  List<int> zahlen = [1, 2, 3];
  
  // Anonyme Funktion mit forEach
  zahlen.forEach((zahl) {
    print(zahl);
  });
}

10.4 Pfeilfunktionen

dart
void main() {
  // Pfeilfunktion (nur einzelner Ausdruck)
  List<int> zahlen = [1, 2, 3];
  zahlen.forEach((zahl) => print(zahl));
  
  // Einfache Pfeilfunktion
  int add(int a, int b) => a + b;
  print(add(1, 2));  // 3
}

10.5 Höhere Funktionen

dart
void main() {
  List<int> zahlen = [1, 2, 3, 4, 5];
  
  // map
  List<int> verdoppelt = zahlen.map((zahl) => zahl * 2).toList();
  print(verdoppelt);  // [2, 4, 6, 8, 10]
  
  // where (Filtern)
  List<int> gerade = zahlen.where((zahl) => zahl % 2 == 0).toList();
  print(gerade);  // [2, 4]
  
  // reduce
  int summe = zahlen.reduce((wert, element) => wert + element);
  print(summe);  // 15
}

10.6 Closures

dart
Functionhler() {
  int count = 0;
  return () {
    count++;
    return count;
  };
}

void main() {
  var increment =hler();
  print(increment());  // 1
  print(increment());  // 2
  print(increment());  // 3
}

10.7 Praxisbeispiel

dart
// Datenverarbeitung mit höheren Funktionen
void main() {
  List<Map<String, dynamic>> studenten = [
    {'name': 'Alice', 'note': 85},
    {'name': 'Bob', 'note': 92},
    {'name': 'Charlie', 'note': 78}
  ];
  
  // Hohe Noten filtern
  var hoheNoten = studenten.where((s) => s['note'] >= 80).toList();
  print(hoheNoten);
  
  // Durchschnittsnote berechnen
  double durchschnitt = studenten.map((s) => s['note']).reduce((a, b) => a + b) / studenten.length;
  print('Durchschnitt: ' + durchschnitt.toString());
}

Frei für alle Anfänger