Menu
Coddy logo textTech

Aufrufbare Klassen

Teil des Abschnitts Objektorientierte Programmierung der Dart-Journey von Coddy. Lektion 84 von 110.

In Dart kannst du Instanzen einer Klasse aufrufbar wie Funktionen machen, indem du die Methode call() implementierst. Dadurch kannst du ein Objekt mit der Aufrufsyntax für Funktionen verwenden – indem du direkt Klammern auf der Instanz verwendest.

class Multiplier {
  final int factor;
  
  Multiplier(this.factor);
  
  int call(int value) {
    return value * factor;
  }
}

void main() {
  var double = Multiplier(2);
  var triple = Multiplier(3);
  
  print(double(5));   // 10 - das Objekt wie eine Funktion aufrufen
  print(triple(5));   // 15
}

Wenn du double(5) schreibst, ruft Dart automatisch die Methode call() auf, wobei 5 als Argument übergeben wird. Das Objekt verhält sich wie eine Funktion und behält dennoch seinen Zustand (das Feld factor).

Die call()-Methode kann jede beliebige Signatur haben – mehrere Parameter, optionale Parameter oder sogar unterschiedliche Typen zurückgeben:

class Greeter {
  final String greeting;
  
  Greeter(this.greeting);
  
  String call(String name, {String punctuation = '!'}) {
    return '$greeting, $name$punctuation';
  }
}

void main() {
  var hello = Greeter('Hello');
  print(hello('Alice'));              // Hallo, Alice!
  print(hello('Bob', punctuation: '.')); // Hallo, Bob.
}

Aufrufbare Klassen sind nützlich, wenn du funktionsähnliches Verhalten mit Zustand oder Konfiguration kombinieren musst. Sie werden häufig verwendet, um wiederverwendbare Operationen, Validierer oder Transformationen zu erstellen, die sich Einstellungen zwischen Aufrufen merken müssen.

challenge icon

Aufgabe

Einfach

Erstelle ein Textformatierungssystem mit aufrufbaren Klassen! Du erstellst Objekte, die wie Funktionen aufgerufen werden können, um Text auf verschiedene Weise umzuwandeln, während sie ihre eigenen Konfigurationseinstellungen beibehalten.

Du organisierst deinen Code in zwei Dateien:

  • formatters.dart: Erstelle zwei aufrufbare Klassen, die Text umwandeln:
    • Eine Wrapper-Klasse, die Text mit einem Präfix und einem Suffix umschließt. Sie soll einen String prefix und einen String suffix speichern und bei einem Aufruf mit einem String text-Parameter den Text zwischen dem Präfix und dem Suffix zurückgeben.
    • Eine Repeater-Klasse, die Text eine bestimmte Anzahl von Malen wiederholt. Sie soll einen int times-Wert speichern und bei einem Aufruf mit einem String text-Parameter den Text so oft wiedergeben, mit einem Leerzeichen zwischen jeder Wiederholung.
  • main.dart: Importiere deine Formatierer und zeige, wie aufrufbare Klassen funktionieren:
    • Erstelle einen Wrapper mit dem Präfix "[" und dem Suffix "]"
    • Erstelle einen weiteren Wrapper mit dem Präfix "***" und dem Suffix "***"
    • Erstelle einen Repeater, der 3-mal wiederholt
    • Rufe den ersten Wrapper mit "Hello" auf und gib das Ergebnis aus
    • Rufe den zweiten Wrapper mit "Important" auf und gib das Ergebnis aus
    • Rufe den Repeater mit "Go" auf und gib das Ergebnis aus
    • Führe sie schließlich zusammen: Rufe den ersten Wrapper mit dem Ergebnis des Aufrufs des Repeaters mit "Dart" auf und gib das Ergebnis aus

Beachte, wie sich jedes Formatiererobjekt seine Konfiguration merkt und direkt mit Klammern aufgerufen werden kann, genau wie eine Funktion!

Erwartete Ausgabe:

[Hello]
***Important***
Go Go Go
[Dart Dart Dart]

Probier es selbst

import 'formatters.dart';

void main() {
  // TODO: Erstelle einen Wrapper mit Präfix "[" und Suffix "]"
  
  // TODO: Erstelle einen weiteren Wrapper mit Präfix "***" und Suffix "***"
  
  // TODO: Erstelle einen Repeater, der 3 Mal wiederholt
  
  // TODO: Rufe den ersten Wrapper mit "Hello" auf und gib das Ergebnis aus
  
  // TODO: Rufe den zweiten Wrapper mit "Important" auf und gib das Ergebnis aus
  
  // TODO: Rufe den Repeater mit "Go" auf und gib das Ergebnis aus
  
  // TODO: Kombiniere sie: rufe den ersten Wrapper mit dem Ergebnis von
  // dem Aufruf des Repeaters mit "Dart" auf und gib das Ergebnis aus
  
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-Dart-Compiler