Generics in Dart (2021)

 

Programmiersprache Dart: Generics
Vor kurzem habe ich schon einige Posts über Listen in Dart online gestellt. Ein verwandtes Thema sind Generics in Dart. Verwandt deshalb, weil Listen eine Möglichkeit sind, eine Datensammlung zu bearbeiten. Eine Datensammlung wiederum kann verschiedene Typen enthalten. 

Generics wiederum sind ein Ansatz mit solchen Typen umzugehen, wie zum Beispiel Integer oder String.

Bevor wir aber in das Thema einsteigen ein kleines Vorwort:

Vielleicht gehören Sie zu den Programmierern, die praktisch alles zu der verwendeten Sprache auswendig wissen. Dann Gratulation :-) !!
Bei den meisten ist das nicht der Fall. So gehört ein Blick in die Dokumentation der Entwickler, oder die Verwendung von anderen Informationsquellen im Internet, für viele dazu. 

Dart ist eine objektorientierte Programmiersprache und deshalb werden Sie früher oder später auf Generics treffen. Sie zu verstehen ist wichtig, um Dart richtig verwenden zu können.

Erstes Beispiel

Beispiel getRange
Im Beispiel links, sehen Sie eine Definition einer Methode, getRange(...).  Diese erwartet zwei Variablen beim Aufruf, int start und int end. Sie gibt ein Iterable zurück vom Typ <E>. .

Was hat es aber mit dem Typ<E> auf sich ? Generics sind ein Weg dem Compiler mitzuteilen, was für einen Typ zulässig ist. Dementsprechend kann er den Code überprüfen !

Im Verlauf der Zeit hat sich eine Konvention herausgebildet:

  • E steht für ein Element. Mit List<E> ist eine Liste von Elementen gemeint
  • T steht für Typ, wie Integer, bool, double
  • V steht für Value
  • K steht für Key
  • R steht für den Return Typen einer Funktion
Es sind noch weitere Buchstaben im Gebrauch. Bitte hier die Entwickler Docs konsultieren.

Aber kommen wir zu einem Beispielcode:

Generics in Dart. Beispiel mit T


Betrachten Sie im Code oben zuerst die Funktion meineFunktion. Mit <T extends num> deklarieren wir, das die Funktion Variablen erwartet die vom Typ her eine Erweiterung der num Klasse in Dart sind. Das heisst, Sie werden einen Fehler generieren, sollten Sie versuchen die Funktion mit einem String als Argument aufzurufen.

Mit (T nummer) legen wir fest, das die Variable, die wir übergeben, ein Typ ist. Also kein Objekt etc. meineFunktion kann jetzt sowohl mit einem Integer Wert, als auch einem double Wert aufgerufen werden !

Hier sieht man auch schon den Vorteil: statt zwei Funktionen zu programmieren, eine für die Integer Zahl, die andere für die double Zahl, genügt eine.

Das gleiche Prinzip lässt sich auch auf Klassen anwenden. Hier ein Beispiel:

Generics in Dart Beispiel Klasse

Im Code oben wird eine Klasse definiert, die sowohl mit einem String, als auch mit einem bool Wert verwendet werden kann. Eigentlich aber sollte man bei der Objekt Erschaffung folgendes Format verwenden:

resultat = BasisSpeicher<bool>(false);

Das macht es um einiges klarer.

Fazit: Generics können ein mächtiges Werkzeug sein, vor allem in grösseren Projekten. Man sollte aber im Hinterkopf behalten, das es einiges an Vorplanung des Codes braucht, um wirklich Nutzen daraus zu ziehen.


Kommentare

Beliebte Posts aus diesem Blog

Flutter und JSON

Flutter BloC Pattern 1

Dart Basic: Parameter in Funktionen