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

  1. Excepciones: Eventos anómalos que ocurren durante la ejecución de un programa y que pueden interrumpir su flujo normal.
  2. Try-Catch: Bloques de código utilizados para capturar y manejar excepciones.
  3. Throw: Palabra clave utilizada para lanzar una excepción.
  4. 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 y catch.

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.

© Copyright 2024. Todos los derechos reservados