
Try, on, catch y finally
En Dart, las palabras clave try
, on
, catch
y finally
se utilizan para manejar y controlar excepciones en el código. Permiten capturar y manejar errores que pueden ocurrir durante la ejecución del programa.
El bloque try
se utiliza para envolver el código que puede generar una excepción. Si ocurre una excepción dentro del bloque try
, se lanza y se busca un bloque catch
que pueda manejar esa excepción específica.
El bloque catch
se utiliza para capturar y manejar una excepción específica que se haya lanzado. Se especifica el tipo de excepción que se desea capturar utilizando la palabra clave on
seguida del tipo de excepción. Dentro del bloque catch
, se puede realizar alguna acción o proporcionar una respuesta adecuada al error capturado.
El bloque finally
es opcional y se utiliza para especificar un bloque de código que se ejecutará sin importar si se lanzó una excepción o si se capturó y manejó correctamente. Se utiliza para realizar acciones que siempre deben ejecutarse, como cerrar recursos o liberar memoria.
Aquí tienes un ejemplo que muestra cómo se utilizan try
, on
, catch
y finally
en Dart:
void dividir(int a, int b) {
try {
int resultado = a ~/ b;
print('El resultado de la división es: $resultado');
} on IntegerDivisionByZeroException {
print('No se puede dividir por cero');
} catch (e) {
print('Error desconocido: $e');
} finally {
print('Fin del proceso');
}
}
void main() {
dividir(10, 2); // Imprime "El resultado de la división es: 5\nFin del proceso"
dividir(10, 0); // Imprime "No se puede dividir por cero\nFin del proceso"
dividir(10, '2'); // Imprime "Error desconocido: Exception: Expected a value of type 'int', but got one of type 'String'\nFin del proceso"
}
En el ejemplo anterior, la función dividir()
recibe dos números a
y b
y realiza una división utilizando el operador ~/
. Dentro del bloque try
, se realiza la división y se imprime el resultado.
Si b
es igual a cero, se lanzará una excepción IntegerDivisionByZeroException
. Esto se captura y se maneja en el bloque catch
correspondiente, donde se imprime un mensaje indicando que no se puede dividir por cero.
El bloque catch (e)
captura cualquier excepción que no sea IntegerDivisionByZeroException
. Se imprime un mensaje genérico indicando un error desconocido y se muestra la excepción capturada.
Finalmente, el bloque finally
se ejecuta siempre, sin importar si se capturó una excepción o no. En este ejemplo, se imprime un mensaje indicando el fin del proceso.
En la función main()
, se llama a la función dividir()
con diferentes argumentos para mostrar cómo se manejan las excepciones y cómo se ejecuta el bloque finally
.
Utilizando try
, on
, catch
y finally
, puedes controlar y manejar excepciones en Dart, proporcionando una respuesta adecuada a los errores y asegurándote de que las acciones finales siempre se ejecuten correctamente.
Ejercicio de la Sesión:
void main() async{
print('Inicio del programa');
try{
final value = await httpGet('https://jenner.pe');
print('Exito: $value');
} on Exception catch(err) {
print('Tenemos una Exception: $err');
} catch (err) {
print('OPP!! algo terrible pasór: $err');
} finally {
print('Fin del try y catch');
}
print('Fin del programa');
}
Future<String> httpGet( String url) async {
await Future.delayed( Duration(seconds: 1));
throw Exception('No hay parámetros en la URL');
// throw 'Error en la petición';
// return 'Tenemos un valor de la petición';
}