typedef (Typalias)

Definition

Zweck: Mit typedef lassen sich kurze Bezeichnungen für vorhandene Datentypen erstellen, diese werden auch Typaliase genannt. Ab Dart 2.13 werden alle Typen unterstützt; ältere Versionen erlaubten nur Funktions-Typaliase.

Syntax: typedef Alias = Ursprungstyp;

Beispiel: typedef IntList = List<int>;. Nach dieser Deklaration kann man überall IntList statt der langen Schreibweise List<int> verwenden.

typedef IntList = List<int>;
IntList il = [1, 2, 3];Code-Sprache: Dart (dart)

Unterstützung generischer Parameter

Typaliase können Generika enthalten, um verschachtelte komplexe Typen übersichtlicher zu gestalten:

typedef ListMapper<X> = Map<X, List<X>>;Code-Sprache: Dart (dart)

ListMapper<String> ist identisch mit Map<String, List<String>>, der Quellcode wird kürzer und leichter lesbar.

typedef ListMapper<X> = Map<X, List<X>>;
Map<String, List<String>> m1 = {}; // Langwierige Standardschreibweise
ListMapper<String> m2 = {}; // Gleicher Typ, kompakter und verständlicherCode-Sprache: Dart (dart)

Funktions-Typaliase

Sie können Aliase für komplette Funktionssignaturen definieren, um ein einheitliches Funktionsformat im gesamten Code durchzusetzen:

typedef Compare<T> = int Function(T a, T b);Code-Sprache: Dart (dart)

Jede Funktion mit der Signatur (T, T) → int zählt zum Typ Compare<T>. Mit dem Operator is lässt sich prüfen, ob der Typ passt.

typedef Compare<T> = int Function(T a, T b);

int sort(int a, int b) => a - b;

void main() {
  assert(sort is Compare<int>); // Prüfung ergibt true
}
Code-Sprache: Dart (dart)

Praktische Beispiele

// Typaliase definieren
typedef IntList = List<int>;
typedef StringMap = Map<String, dynamic>;

void main() {
  // Aliase direkt nutzen
  IntList nums = [10, 20, 30];
  StringMap info = {"name": "dart", "version": "2.18"};

  print(nums);
  print(info);
}Code-Sprache: JavaScript (javascript)
// Generischer Alias: Schlüssel X, Wert ist Liste mit Typ X
typedef ListMapper<X> = Map<X, List<X>>;

void main() {
  // Lange native Schreibweise
  Map<String, List<String>> oldData = {
    "fruit": ["apple", "banana"]
  };

  // Kompakter typedef-Alias, identischer Datentyp
  ListMapper<String> newData = {
    "fruit": ["apple", "banana"]
  };

  print(oldData);
  print(newData);
}Code-Sprache: Dart (dart)
// Generischer Funktionsalias: zwei Parameter vom Typ T, Rückgabewert int
typedef Compare<T> = int Function(T a, T b);

// Funktion passend zu Compare<int>
int intSort(int a, int b) => a - b;
// Funktion passend zu Compare<String>
int strSort(String a, String b) => a.length - b.length;

void main() {
  // Typüberprüfung
  assert(intSort is Compare<int>);
  assert(strSort is Compare<String>);

  // Übergabe als Funktionsparameter
  List<int> arr = [5, 1, 3];
  arr.sort(intSort);
  print(arr); // Ausgabe: [1, 3, 5]
}Code-Sprache: Dart (dart)

typedef (Typalias)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert