En este módulo, aprenderás cómo manejar errores y excepciones en Dart. El manejo adecuado de excepciones es crucial para crear aplicaciones robustas y confiables. Veremos cómo capturar y gestionar errores de manera efectiva para evitar que nuestra aplicación se bloquee inesperadamente.
Conceptos Clave
- Excepciones: Eventos anómalos que ocurren durante la ejecución de un programa y que pueden interrumpir su flujo normal.
- Try-Catch: Bloques de código utilizados para capturar y manejar excepciones.
- Throw: Palabra clave utilizada para lanzar una excepción.
- Finally: Bloque de código que se ejecuta siempre, independientemente de si se lanzó una excepción o no.
Try-Catch
El bloque try-catch
se utiliza para capturar excepciones y manejar errores. Aquí tienes un ejemplo básico:
void main() { try { int result = 12 ~/ 0; // Esto lanzará una excepción print(result); } catch (e) { print('Se ha producido una excepción: $e'); } }
Explicación
- try: El bloque de código que puede lanzar una excepción se coloca dentro del bloque
try
. - catch: Si se lanza una excepción, el control se transfiere al bloque
catch
, donde se puede manejar el error.
Throw
La palabra clave throw
se utiliza para lanzar una excepción de manera explícita. Aquí tienes un ejemplo:
void checkAge(int age) { if (age < 18) { throw Exception('La edad debe ser mayor o igual a 18'); } } void main() { try { checkAge(16); } catch (e) { print('Se ha producido una excepción: $e'); } }
Explicación
- throw: Lanza una excepción con un mensaje específico.
- Exception: Clase base para todas las excepciones en Dart.
Finally
El bloque finally
se ejecuta siempre, independientemente de si se lanzó una excepción o no. Es útil para liberar recursos o realizar tareas de limpieza.
void main() { try { int result = 12 ~/ 0; // Esto lanzará una excepción print(result); } catch (e) { print('Se ha producido una excepción: $e'); } finally { print('Este bloque se ejecuta siempre'); } }
Explicación
- finally: Bloque de código que se ejecuta siempre, después de los bloques
try
ycatch
.
Ejercicios Prácticos
Ejercicio 1: Manejo Básico de Excepciones
Escribe una función que divida dos números y maneje la excepción de división por cero.
void divideNumbers(int a, int b) { try { double result = a / b; print('El resultado es $result'); } catch (e) { print('Error: No se puede dividir por cero'); } } void main() { divideNumbers(10, 0); }
Solución
void divideNumbers(int a, int b) { try { double result = a / b; print('El resultado es $result'); } catch (e) { print('Error: No se puede dividir por cero'); } } void main() { divideNumbers(10, 0); }
Ejercicio 2: Lanzar y Capturar Excepciones Personalizadas
Crea una excepción personalizada y úsala en una función que verifique si un número es negativo.
class NegativeNumberException implements Exception { String cause; NegativeNumberException(this.cause); } void checkNumber(int number) { if (number < 0) { throw NegativeNumberException('El número no puede ser negativo'); } else { print('El número es $number'); } } void main() { try { checkNumber(-5); } catch (e) { print('Se ha producido una excepción: $e'); } }
Solución
class NegativeNumberException implements Exception { String cause; NegativeNumberException(this.cause); } void checkNumber(int number) { if (number < 0) { throw NegativeNumberException('El número no puede ser negativo'); } else { print('El número es $number'); } } void main() { try { checkNumber(-5); } catch (e) { print('Se ha producido una excepción: $e'); } }
Resumen
En esta sección, hemos aprendido cómo manejar excepciones en Dart utilizando bloques try-catch
, la palabra clave throw
y el bloque finally
. También hemos visto cómo crear y lanzar excepciones personalizadas. El manejo adecuado de excepciones es esencial para crear aplicaciones robustas y confiables. En el próximo módulo, exploraremos técnicas de depuración para identificar y solucionar errores en nuestro código.
Curso de Programación en Dart
Módulo 1: Introducción a Dart
- Introducción a Dart
- Configuración del Entorno de Desarrollo
- Tu Primer Programa en Dart
- Sintaxis y Estructura Básica