La gestió d'excepcions és una part fonamental de qualsevol llenguatge de programació modern, i Dart no és una excepció. Les excepcions permeten manejar errors de manera controlada, evitant que el programa es bloquegi inesperadament. En aquesta secció, aprendrem com gestionar les excepcions en Dart, incloent-hi com llençar, capturar i manejar errors.
Conceptes Clau
- Excepcions: Són errors que es produeixen durant l'execució d'un programa.
- Try-Catch: Estructura utilitzada per capturar i manejar excepcions.
- Finally: Bloc opcional que s'executa després del bloc try-catch, independentment de si s'ha produït una excepció o no.
- Llançament d'Excepcions: Crear i llençar excepcions personalitzades.
Estructura Try-Catch
L'estructura try-catch
s'utilitza per capturar i manejar excepcions. Aquí teniu un exemple bàsic:
void main() { try { int result = 12 ~/ 0; // Això llençarà una excepció } catch (e) { print('S'ha produït una excepció: $e'); } }
Explicació del Codi
- try: Conté el codi que pot llençar una excepció.
- catch: Captura l'excepció i permet manejar-la. La variable
e
conté la informació de l'excepció.
Bloc Finally
El bloc finally
s'executa sempre, independentment de si s'ha produït una excepció o no. És útil per a netejar recursos, com ara tancar fitxers o connexions de xarxa.
void main() { try { int result = 12 ~/ 0; } catch (e) { print('S'ha produït una excepció: $e'); } finally { print('Aquest bloc s\'executa sempre.'); } }
Llançament d'Excepcions
Podeu llençar excepcions personalitzades utilitzant la paraula clau throw
. Això és útil quan voleu indicar errors específics en el vostre codi.
void verificarEdat(int edat) { if (edat < 18) { throw Exception('Edat no vàlida. Has de ser major de 18 anys.'); } } void main() { try { verificarEdat(16); } catch (e) { print('S\'ha produït una excepció: $e'); } }
Explicació del Codi
- throw: Llença una excepció amb un missatge personalitzat.
- Exception: Classe base per a totes les excepcions en Dart.
Excepcions Personalitzades
Podeu crear les vostres pròpies classes d'excepcions per manejar errors específics de la vostra aplicació.
class EdatNoValidaException implements Exception { String causa; EdatNoValidaException(this.causa); } void verificarEdat(int edat) { if (edat < 18) { throw EdatNoValidaException('Edat no vàlida. Has de ser major de 18 anys.'); } } void main() { try { verificarEdat(16); } catch (e) { print('S\'ha produït una excepció: ${e.causa}'); } }
Explicació del Codi
- implements Exception: Indica que la classe
EdatNoValidaException
és una excepció. - causa: Variable que conté el missatge d'error.
Exercicis Pràctics
Exercici 1: Divisió Segura
Escriu una funció que divideixi dos nombres i gestioni l'excepció de divisió per zero.
double dividir(int a, int b) { try { return a / b; } catch (e) { print('Error: No es pot dividir per zero.'); return 0; } } void main() { print(dividir(10, 2)); // 5.0 print(dividir(10, 0)); // Error: No es pot dividir per zero. 0 }
Exercici 2: Validació d'Entrada
Escriu una funció que validi una entrada d'usuari i llençi una excepció si l'entrada no és vàlida.
class EntradaNoValidaException implements Exception { String causa; EntradaNoValidaException(this.causa); } void validarEntrada(String entrada) { if (entrada.isEmpty) { throw EntradaNoValidaException('L\'entrada no pot estar buida.'); } } void main() { try { validarEntrada(''); } catch (e) { print('S\'ha produït una excepció: ${e.causa}'); } }
Resum
En aquesta secció, hem après com gestionar excepcions en Dart utilitzant les estructures try-catch
i finally
. També hem vist com llençar excepcions personalitzades i crear les nostres pròpies classes d'excepcions. La gestió d'excepcions és crucial per escriure codi robust i fiable, i és una habilitat essencial per a qualsevol programador.
En la següent secció, explorarem tècniques de depuració per ajudar-vos a identificar i solucionar errors en el vostre codi.
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