Dart Kurs Kompilierung wiederholen

Lektion 19 - Methoden Vertiefung

Methoden in Dart richtig verstehen

Methoden sind benannte Code-Bloecke, die eine Aufgabe erledigen. Sie helfen dir, Programme lesbarer zu machen, Wiederholungen zu vermeiden und Verhalten sauber in Klassen oder Widgets zu organisieren.

1. Was ist eine Methode?

Eine Methode ist wie eine kleine Arbeitsanweisung mit Namen. Statt denselben Code mehrfach zu schreiben, lagerst du ihn in eine Methode aus und rufst ihn bei Bedarf auf.

void greet() {
  print('Hallo!');
}

void main() {
  greet();
}

greet ist der Methodenname. Die Klammern () bedeuten: Diese Methode kann aufgerufen werden.

2. Aufbau einer Methode

Eine Methode besteht meistens aus Rueckgabetyp, Name, Parametern und Methodenkoerper.

Rueckgabetyp name(Parameter) {
  Anweisungen
  optional return Wert
}
TeilBedeutung
voidDie Methode gibt keinen Wert zurueck.
intDie Methode gibt eine ganze Zahl zurueck.
StringDie Methode gibt Text zurueck.
nameSagt, wofuer die Methode da ist.
()Enthaelt optionale Eingaben, also Parameter.

3. Methoden ohne Rueckgabewert

Methoden mit void fuehren etwas aus, liefern aber keinen Wert zurueck. Sie eignen sich fuer Ausgaben, Zustandsaenderungen oder Aktionen.

void printSeparator() {
  print('----------------');
}

void main() {
  print('Start');
  printSeparator();
  print('Ende');
}

4. Methoden mit Rueckgabewert

Wenn eine Methode etwas berechnen und weitergeben soll, nutzt du einen Rueckgabewert. Dann brauchst du return.

int doubleNumber(int value) {
  return value * 2;
}

void main() {
  final result = doubleNumber(4);
  print(result); // 8
}

Der Rueckgabetyp int verspricht: Diese Methode liefert am Ende eine ganze Zahl.

5. Parameter: Werte in Methoden geben

Parameter sind Eingaben fuer Methoden. Dadurch kann dieselbe Methode mit unterschiedlichen Werten arbeiten.

String buildGreeting(String name) {
  return 'Hallo $name';
}

void main() {
  print(buildGreeting('Finja'));
  print(buildGreeting('Alex'));
}

Ohne Parameter muesstest du fuer jeden Namen eine eigene Methode schreiben. Mit Parametern bleibt der Code kurz und flexibel.

6. Mehrere Parameter

Eine Methode kann mehrere Werte entgegennehmen. Wichtig ist, dass die Reihenfolge beim Aufruf zu den Parametern passt.

int add(int first, int second) {
  return first + second;
}

void main() {
  print(add(3, 7)); // 10
}

Gute Parameternamen sind wichtig. first und second sind besser als a und b, wenn der Code fuer Lernende lesbar bleiben soll.

7. Optionale Parameter

In Dart kannst du Parameter optional machen. Das ist praktisch, wenn ein Standardwert reichen soll, aber bei Bedarf ueberschrieben werden kann.

String createTitle(String text, [String prefix = 'Thema']) {
  return '$prefix: $text';
}

void main() {
  print(createTitle('Methoden'));
  print(createTitle('Methoden', 'Lektion'));
}

Eckige Klammern [] bedeuten: Dieser Parameter ist optional und wird ueber die Position uebergeben.

8. Benannte Parameter

Benannte Parameter machen Aufrufe lesbarer, besonders wenn mehrere Werte uebergeben werden. Sie stehen in geschweiften Klammern.

String createUser({
  required String name,
  int age = 0,
  bool isActive = true,
}) {
  return '$name, $age, active: $isActive';
}

void main() {
  print(createUser(name: 'Mina', age: 21));
}
SchluesselwortBedeutung
requiredDer Wert muss beim Aufruf angegeben werden.
age = 0Wenn kein Wert kommt, wird 0 genutzt.
name: 'Mina'Der Aufruf sagt klar, welcher Wert gemeint ist.

9. Methoden in Klassen

In Klassen beschreiben Methoden, was ein Objekt tun kann. Attribute speichern Zustand, Methoden arbeiten mit diesem Zustand.

class Counter {
  int value = 0;

  void increase() {
    value++;
  }

  void decrease() {
    value--;
  }

  int doubled() {
    return value * 2;
  }
}

void main() {
  final counter = Counter();
  counter.increase();
  print(counter.doubled());
}

increase() veraendert das Objekt. doubled() berechnet einen Wert aus dem aktuellen Objektzustand.

10. Methoden in Flutter

In Flutter nutzt du Methoden oft, um Widgets auszulagern oder State-Aenderungen klar zu benennen. Dadurch bleibt die build-Methode lesbarer.

void increaseCounter() {
  setState(() {
    counter++;
  });
}

Widget buildCounterButton() {
  return ElevatedButton(
    onPressed: increaseCounter,
    child: const Text('+1'),
  );
}

Die Methode increaseCounter wird nicht direkt ausgefuehrt, sondern als Callback an onPressed uebergeben.

11. Pfeilsyntax fuer kurze Methoden

Wenn eine Methode nur einen einzelnen Ausdruck zurueckgibt, kannst du die kurze Pfeilsyntax nutzen.

int square(int value) => value * value;

String labelFor(String name) => 'User: $name';

Die Pfeilsyntax ist praktisch, aber nicht immer besser. Beim Lernen ist die lange Form oft klarer, weil du return bewusst siehst.

12. Gute Methodennamen

Methodennamen sollten wie kleine Verben oder klare Fragen klingen. So erkennt man schnell, ob eine Methode etwas tut oder etwas prueft.

SchwachBesser
doIt()saveUser()
check()isAdult()
calc()calculateTotalPrice()
change()updateCounterValue()

13. Typische Fehler

FehlerErklaerung
return fehltEine Methode mit Rueckgabetyp muss einen Wert liefern.
Falscher RueckgabetypString versprochen, aber int zurueckgegeben.
Zu viele AufgabenEine Methode sollte moeglichst eine klare Aufgabe haben.
Unklare NamenDer Name sollte die Absicht verraten.

14. Planung vor Dart-Code

Bevor du eine Methode programmierst, kannst du ihre Aufgabe kurz in Worten planen. Das hilft besonders bei Aufgaben mit Bedingungen.

Methode calculateDiscount(price, isStudent):
  Wenn isStudent wahr ist:
    Gib price * 0.8 zurueck
  Sonst:
    Gib price zurueck
double calculateDiscount(double price, bool isStudent) {
  if (isStudent) {
    return price * 0.8;
  }

  return price;
}

15. Aufgaben

  1. Schreibe eine Methode isAdult, die prueft, ob ein Alter mindestens 18 ist.
  2. Schreibe eine Methode formatName, die Vorname und Nachname verbindet.
  3. Schreibe eine Methode calculateTotal fuer Preis und Menge.
  4. Schreibe zuerst eine kurze Planung fuer jede Methode.
  5. Baue eine Klasse BankAccount mit Methoden deposit und withdraw.
Methode withdraw(amount):
  Wenn amount kleiner oder gleich 0 ist:
    Gib false zurueck

  Wenn amount groesser als balance ist:
    Gib false zurueck

  Ziehe amount von balance ab
  Gib true zurueck
Weiter zu Vererbung