Qu'est-ce qu'un typedef dans Dart?

j'ai lu la description, et je comprends qu'il s'agit d'un alias de type de fonction.

mais comment l'utiliser? Pourquoi déclarer des champs avec un type de fonction? Quand dois-je utiliser? Ce problème permet-il de résoudre?

je pense que j'ai besoin d'un ou deux exemples de code.

30
demandé sur nbro 2012-09-22 20:45:00

2 réponses

un modèle d'usage courant de typedef dans Dart est la définition d'une interface de rappel. Par exemple:

typedef void LoggerOutputFunction(String msg);

class Logger {
  LoggerOutputFunction out;
  Logger() {
    out = print;
  }
  void log(String msg) {
    out(msg);
  }
}

void timestampLoggerOutputFunction(String msg) {
  String timeStamp = new Date.now().toString();
  print('${timeStamp}: $msg');
}

void main() {
  Logger l = new Logger();
  l.log('Hello World');
  l.out = timestampLoggerOutputFunction;
  l.log('Hello World');
}

L'exécution de l'échantillon ci-dessus fournit la sortie suivante:

Hello World

2012-09-22 10:19:15.139: Bonjour Tout Le Monde

la ligne typedef indique que la fonction LoggerOutputFunction prend un paramètre String et retourne void.

timestampLoggerOutputFunction correspond à cette définition et peut donc être assignée à la hors champ.

Laissez-moi savoir si vous avez besoin d'un autre exemple.

45
répondu Cutch 2014-05-08 17:08:29

Dart 1.24 introduit une nouvelle syntaxe typedef pour supporter également les fonctions génériques. La syntaxe précédente est toujours supportée.

typedef F = List<T> Function<T>(T);
https://github.com/dart-lang/sdk/blob/master/docs/language/informal/generic-function-type-alias.md

void foo<T, S>(T Function(int, S) aFunction) {...}
https://www.dartlang.org/guides/language/language-tour#typedefs

6
répondu Günter Zöchbauer 2018-04-19 04:22:16