La programació asíncrona és una tècnica que permet executar operacions de manera no bloquejant, és a dir, permet que el programa continuï executant altres tasques mentre espera que una operació asíncrona es completi. En Dart, la programació asíncrona és essencial per a la construcció d'aplicacions reactives i eficients, especialment quan es treballa amb operacions d'entrada/sortida (I/O) com ara la lectura de fitxers, la comunicació de xarxa o les consultes a bases de dades.
Conceptes Clau
Futures
Un Future representa una operació que es completarà en algun moment en el futur. Pot tenir tres estats:
- Pendiente: La operació encara no s'ha completat.
- Completat amb èxit: La operació s'ha completat amb èxit i ha retornat un valor.
- Completat amb error: La operació s'ha completat amb un error.
Async i Await
Les paraules clau async i await s'utilitzen per treballar amb operacions asíncrones de manera més senzilla i llegible.
async: S'utilitza per marcar una funció com a asíncrona.await: S'utilitza dins d'una funcióasyncper esperar que unFuturees completi.
Exemples Pràctics
Exemple 1: Utilitzant Futures
Future<String> fetchUserOrder() {
// Simula una operació de xarxa amb un retard de 2 segons
return Future.delayed(Duration(seconds: 2), () => 'Cafè amb llet');
}
void main() {
print('Inici de la comanda');
fetchUserOrder().then((order) {
print('La teva comanda és: $order');
});
print('Fi de la comanda');
}Explicació:
fetchUserOrderretorna unFutureque es completa després de 2 segons amb el valor 'Cafè amb llet'.mainimprimeix 'Inici de la comanda', cridafetchUserOrderi després imprimeix 'Fi de la comanda'.- Quan el
Futurees completa, el callback passat athens'executa i imprimeix 'La teva comanda és: Cafè amb llet'.
Exemple 2: Utilitzant Async i Await
Future<String> fetchUserOrder() async {
// Simula una operació de xarxa amb un retard de 2 segons
return await Future.delayed(Duration(seconds: 2), () => 'Cafè amb llet');
}
void main() async {
print('Inici de la comanda');
var order = await fetchUserOrder();
print('La teva comanda és: $order');
print('Fi de la comanda');
}Explicació:
fetchUserOrderés una funcióasyncque espera 2 segons abans de retornar 'Cafè amb llet'.mainés també una funcióasyncque espera el resultat defetchUserOrderabans de continuar.
Exercicis Pràctics
Exercici 1: Simulació d'una Operació de Xarxa
Escriu una funció fetchData que simuli una operació de xarxa que triga 3 segons a completar-se i retorna la cadena 'Dades rebudes'. Utilitza async i await per esperar el resultat i imprimeix-lo a la consola.
Future<String> fetchData() async {
// Escriu el teu codi aquí
}
void main() async {
// Escriu el teu codi aquí
}Solució:
Future<String> fetchData() async {
return await Future.delayed(Duration(seconds: 3), () => 'Dades rebudes');
}
void main() async {
print('Inici de la recuperació de dades');
var data = await fetchData();
print('Resultat: $data');
print('Fi de la recuperació de dades');
}Exercici 2: Gestió d'Errors
Modifica la funció fetchData per simular un error en la recuperació de dades. Utilitza try-catch per gestionar l'error i imprimeix un missatge d'error a la consola.
Future<String> fetchData() async {
// Escriu el teu codi aquí
}
void main() async {
// Escriu el teu codi aquí
}Solució:
Future<String> fetchData() async {
return await Future.delayed(Duration(seconds: 3), () => throw 'Error en la recuperació de dades');
}
void main() async {
print('Inici de la recuperació de dades');
try {
var data = await fetchData();
print('Resultat: $data');
} catch (e) {
print('S\'ha produït un error: $e');
}
print('Fi de la recuperació de dades');
}Resum
En aquesta secció, hem après els conceptes bàsics de la programació asíncrona en Dart, incloent l'ús de Future, async i await. Hem vist com aquestes eines ens permeten escriure codi no bloquejant de manera més llegible i hem practicat amb exemples i exercicis pràctics. La programació asíncrona és una habilitat essencial per a qualsevol desenvolupador de Dart, especialment quan es treballa amb operacions d'entrada/sortida.
Curs de Programació en Dart
Mòdul 1: Introducció a Dart
- Introducció a Dart
- Configuració de l'Entorn de Desenvolupament
- El Teu Primer Programa en Dart
- Sintaxi i Estructura Bàsica
Mòdul 2: Conceptes Bàsics de Dart
Mòdul 3: Col·leccions
Mòdul 4: Programació Orientada a Objectes en Dart
Mòdul 5: Funcionalitats Avançades de Dart
Mòdul 6: Gestió d'Errors i Depuració
Mòdul 7: Paquets i Biblioteques de Dart
Mòdul 8: Dart per a Web i Mòbil
- Introducció a Flutter
- Construcció d'una Aplicació Simple amb Flutter
- Dart per al Desenvolupament Web
