|
| 1 | +/* |
| 2 | + * EJERCICIO: |
| 3 | + * Explora el concepto de manejo de excepciones según tu lenguaje. |
| 4 | + * Fuerza un error en tu código, captura el error, imprime dicho error |
| 5 | + * y evita que el programa se detenga de manera inesperada. |
| 6 | + * Prueba a dividir "10/0" o acceder a un índice no existente |
| 7 | + * de un listado para intentar provocar un error. |
| 8 | +*/ |
| 9 | +/* Manejo de excepciones en JavaScript: |
| 10 | + JavaScript tiene un mecanismo de manejo de excepciones que permite |
| 11 | + capturar errores y manejarlos de forma controlada. Para ello, se |
| 12 | + utiliza la estructura try-catch-finally, que permite intentar |
| 13 | + ejecutar un bloque de código, capturar cualquier excepción que |
| 14 | + se produzca y ejecutar un bloque de código adicional. Por ejemplo: |
| 15 | +*/ |
| 16 | +function dividir(a, b) { |
| 17 | + // Intentamos dividir a por b |
| 18 | + try { |
| 19 | + var resultado = a / b; |
| 20 | + console.log('Resultado:', resultado); |
| 21 | + } |
| 22 | + catch (error) { |
| 23 | + // Capturamos cualquier excepción que se produzca |
| 24 | + console.error('Error:', error); |
| 25 | + } |
| 26 | + finally { |
| 27 | + // Este bloque se ejecuta siempre, haya o no excepciones |
| 28 | + console.log('Fin de la función'); |
| 29 | + } |
| 30 | +} |
| 31 | + |
| 32 | +// Probamos la función con distintos valores |
| 33 | +dividir(10, 2); // Resultado: 5 |
| 34 | +dividir(10, 0); // Error: Infinity |
| 35 | +dividir(10, 'a'); // Error: NaN |
| 36 | +dividir(10); // Error: NaN |
| 37 | +dividir(); // Error: NaN |
| 38 | +dividir(10, 2, 3); // Error: NaN |
| 39 | +// Ejmeplo sin el uso de excepciones |
| 40 | +function dividirSinExcepciones(a, b) { |
| 41 | + if (b === 0) { |
| 42 | + console.error('Error: División por cero'); |
| 43 | + return; |
| 44 | + } |
| 45 | + var resultado = a / b; |
| 46 | + console.log('Resultado:', resultado); |
| 47 | + console.log('Fin de la función'); |
| 48 | +} |
| 49 | + |
| 50 | +// Probamos la función con distintos valores |
| 51 | +dividirSinExcepciones(10, 2); // Resultado: 5 |
| 52 | +dividirSinExcepciones(10, 0); // Error: División por cero |
| 53 | +dividirSinExcepciones(10, 'a'); // Resultado: NaN |
| 54 | + |
| 55 | +/* En este caso, al intentar dividir 10 por 0, se produce una excepción |
| 56 | + de tipo "Infinity". Esta excepción es capturada por el bloque catch, |
| 57 | + que imprime un mensaje de error. A continuación, se ejecuta el bloque |
| 58 | + finally, que imprime un mensaje de fin de programa. De esta forma, |
| 59 | + el programa no se detiene de forma inesperada y podemos controlar |
| 60 | + el flujo de ejecución. |
| 61 | +*/ |
| 62 | + |
| 63 | +/* DIFICULTAD EXTRA (opcional): |
| 64 | +* Crea una función que sea capaz de procesar parámetros, pero que también |
| 65 | +* pueda lanzar 3 tipos diferentes de excepciones (una de ellas tiene que |
| 66 | +* corresponderse con un tipo de excepción creada por nosotros de manera |
| 67 | +* personalizada, y debe ser lanzada de manera manual) en caso de error. |
| 68 | +* - Captura todas las excepciones desde el lugar donde llamas a la función. |
| 69 | +* - Imprime el tipo de error. |
| 70 | +* - Imprime si no se ha producido ningún error. |
| 71 | +* - Imprime que la ejecución ha finalizado. |
| 72 | +*/ |
| 73 | + |
| 74 | +function procesarParametros(param1, param2) { |
| 75 | + try { |
| 76 | + if (param1 === undefined || param2 === undefined) { |
| 77 | + throw new Error('Error: Parámetros indefinidos'); |
| 78 | + } |
| 79 | + if (isNaN(param1) || isNaN(param2)) { |
| 80 | + throw new Error('Error: Parámetros no numéricos'); |
| 81 | + } |
| 82 | + if (param1 === 0 || param2 === 0) { |
| 83 | + throw new Error('Error: División por cero'); |
| 84 | + } |
| 85 | + var resultado = param1 / param2; |
| 86 | + console.log('Resultado:', resultado); |
| 87 | + } |
| 88 | + catch (error) { |
| 89 | + console.error('Error:', error.message); |
| 90 | + } |
| 91 | + finally { |
| 92 | + console.log('Fin de la función'); |
| 93 | + } |
| 94 | +} |
| 95 | + |
| 96 | +// Probamos la función con distintos valores |
| 97 | +procesarParametros(10, 2); // Resultado: 5 |
| 98 | +procesarParametros(10, 0); // Error: División por cero |
| 99 | +procesarParametros(10, 'a'); // Error: Parámetros no numéricos |
| 100 | +procesarParametros(10); // Error: Parámetros indefinidos |
| 101 | +procesarParametros(); // Error: Parámetros indefinidos |
| 102 | +procesarParametros(10, 2, 3); // Resultado: 5 |
0 commit comments