Les fonctions asynchrones en Dart
Les fonctions asynchrones en Dart
-
Présentation
-
La programmation synchrone
- La programmation synchrone classique est une suite de tâches, ou d’instructions, qui sont exécutées l’une après l’autre. Chaque tâche requiert que la tâche précédente soit terminée avant de s’exécuter :
- Dans la programmation synchrone classique, les tâches ou les instructions sont exécutées de manière séquentielle, l’une après l’autre. Chaque tâche doit être terminée avant que la tâche suivante puisse commencer. Cela signifie que l’exécution du programme est bloquée pendant l’exécution de chaque tâche, ce qui peut entraîner des temps d’attente et une utilisation inefficace des ressources.
- La programmation synchrone est simple à comprendre et à raisonner, car le flux d’exécution est linéaire et prévisible. Cependant, elle peut devenir un problème lorsque des tâches prennent du temps, notamment lorsqu’il s’agit d’opérations d’entrée/sortie ou de traitements intensifs. Dans ces cas, l’exécution bloquante peut rendre l’application non réactive et affecter négativement l’expérience utilisateur.
-
La programmation asynchrone
- La programmation asynchrone permet l’exécution de tâches alors qu’une tâche précédente n’est pas encore terminée :
- Les fonctions asynchrones, mentionnées précédemment, offrent une alternative à la programmation synchrone classique. Elles permettent d’exécuter des tâches de manière asynchrone, c’est-à-dire de démarrer une tâche, de passer à la tâche suivante sans attendre la fin de la première, et de revenir à la première tâche lorsque celle-ci est terminée. Cela permet d’optimiser l’utilisation des ressources en évitant les temps d’attente inutiles.
- La programmation asynchrone est particulièrement utile lorsqu’il s’agit d’effectuer des opérations longues ou bloquantes, telles que les appels réseau, les accès à la base de données ou les calculs intensifs. Elle permet de maintenir la réactivité de l’application en évitant de bloquer le thread principal d’exécution.
- Toutes les fonctions que vous souhaitez exécuter de manière asynchrone doivent avoir le modificateur async ajouté.
-
Syntaxe et utilisation d’une fonction asynchrone
- La syntaxe d’une fonction asynchrone en Dart est assez simple. Voici la structure de base :
- Voici une explication détaillée de chaque partie de la syntaxe :
Future<ReturnType> :
Le type de retour de la fonction asynchrone est défini par Future. Future est un objet qui représente la valeur ou l’erreur d’une opération asynchrone. ReturnType est le type de données que la fonction retourne après son exécution. Vous pouvez utiliser void si la fonction ne retourne rien. async :
Le mot-clé async indique que la fonction est asynchrone. Cela signifie que la fonction peut effectuer des opérations asynchrones et qu’elle peut utiliser le mot-clé await pour attendre la fin de ces opérations.nomDeLaFonction :
C’est le nom de la fonction asynchrone que vous définissez.Corps de la fonction asynchrone :
C’est l’ensemble des instructions à exécuter dans la fonction. À l’intérieur du corps de la fonction, vous pouvez utiliser le mot-clé await pour attendre le résultat d’une opération asynchrone.- Voici un exemple concret :
- Dans cet exemple, calculSomme est une fonction asynchrone qui prend deux entiers en entrée et retourne leur somme après une attente de 2 secondes. La fonction renvoie un objet Future<int> car elle retourne un entier après son exécution.
- Il est important de noter que le mot-clé
async
n’est pas limité aux fonctions. Il peut également être utilisé avec des méthodes, des constructeurs et même des expressions lambda pour indiquer qu’ils sont asynchrones. -
Async et await dans la programmation Dart
- Les mots-clés
Async
etawait
sont utilisés pour fournir un moyen déclaratif de définir la fonction asynchrone et d’utiliser leurs résultats. - Le mot-clé
async
est utilisé lorsque l’on souhaite déclarer une fonction comme asynchrone et le mot-cléawait
est utilisé uniquement sur les fonctions asynchrones. Syntaxe: void main() async { .. }
- Si la fonction a un type de retour déclaré, mettez à jour le type de
Future<T>
avec le type de retour. - Et enfin, nous utilisons le mot-clé
await
lorsque nous voulons attendre la fin de la fonction asynchrone.
En résumé, la programmation synchrone classique exécute les tâches de manière séquentielle, tandis que la programmation asynchrone permet une exécution non bloquante et optimisée des tâches. Les fonctions asynchrones en Dart sont un outil puissant pour gérer les opérations asynchrones de manière efficace et claire.
Future<ReturnType> nomDeLaFonction() async {
// Corps de la fonction asynchrone
}
Future<int> calculSomme(int a, int b) async {
int somme = a + b;
await Future.delayed(Duration(seconds: 2)); // Simuler une opération asynchrone
return somme;
}
Future<void> main() async { .. }