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.
un alias typedef, ou function-type, donne à un type de fonction un nom que vous pouvez utiliser lors de la déclaration des champs et des types de retour. Un typedef conserve les informations de type lorsqu'un type de fonction est attribué à un variable.
http://www.dartlang.org/docs/spec/latest/dart-language-specification.html#kix.yyd520hand9j
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.
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.
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