typedef (alias de type)

Définition

Rôle : typedef permet de créer des noms courts pour des types existants, aussi appelés alias de type. Dart prend en charge tous les types à partir de la version 2.13 ; auparavant, seul les types de fonction étaient autorisés.

Syntaxe : typedef Alias = TypeInitial;

Exemple : typedef IntList = List<int>;. Après cette déclaration, vous pouvez utiliser directement IntList au lieu d’écrire List<int>.

typedef IntList = List<int>;
IntList il = [1, 2, 3];Langage du code : Dart (dart)

Prise en charge des paramètres génériques

Les alias de type peuvent intégrer des génériques pour simplifier les types composés complexes :

typedef ListMapper<X> = Map<X, List<X>>;Langage du code : Dart (dart)

ListMapper<String> est strictement équivalent à Map<String, List<String>>, le code devient plus concis et lisible.

typedef ListMapper<X> = Map<X, List<X>>;
Map<String, List<String>> m1 = {}; // Écriture longue et verbeuse
ListMapper<String> m2 = {}; // Même type, plus court et clairLangage du code : Dart (dart)

Alias de type de fonction

Il est possible de définir un alias pour une signature de fonction afin d’uniformiser le format des fonctions :

typedef Compare<T> = int Function(T a, T b);Langage du code : Dart (dart)

Toute fonction correspondant à la signature (T, T) → int appartient au type Compare<T>. L’opérateur is permet de vérifier la compatibilité du type.

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

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

void main() {
  assert(sort is Compare<int>); // Vérification vraie
}
Langage du code : Dart (dart)

Exemples concrets

// Définir des alias de type
typedef IntList = List<int>;
typedef StringMap = Map<String, dynamic>;

void main() {
  // Utiliser directement les alias
  IntList nums = [10, 20, 30];
  StringMap info = {"name": "dart", "version": "2.18"};

  print(nums);
  print(info);
}Langage du code : JavaScript (javascript)
// Alias générique : clé X, valeur tableau de type X
typedef ListMapper<X> = Map<X, List<X>>;

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

  // Forme abrégée avec typedef, type identique
  ListMapper<String> newData = {
    "fruit": ["apple", "banana"]
  };

  print(oldData);
  print(newData);
}Langage du code : Dart (dart)
// Alias de fonction générique : reçoit deux T, renvoie un entier
typedef Compare<T> = int Function(T a, T b);

// Fonction correspondant à Compare<int>
int intSort(int a, int b) => a - b;
// Fonction correspondant à Compare<String>
int strSort(String a, String b) => a.length - b.length;

void main() {
  // Vérification de type
  assert(intSort is Compare<int>);
  assert(strSort is Compare<String>);

  // Utilisation en tant que paramètre
  List<int> arr = [5, 1, 3];
  arr.sort(intSort);
  print(arr); // Résultat : [1, 3, 5]
}Langage du code : Dart (dart)

typedef (alias de type)

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *