|
| 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 | + * DIFICULTAD EXTRA (opcional): |
| 10 | + * Crea una función que sea capaz de procesar parámetros, pero que también |
| 11 | + * pueda lanzar 3 tipos diferentes de excepciones (una de ellas tiene que |
| 12 | + * corresponderse con un tipo de excepción creada por nosotros de manera |
| 13 | + * personalizada, y debe ser lanzada de manera manual) en caso de error. |
| 14 | + * - Captura todas las excepciones desde el lugar donde llamas a la función. |
| 15 | + * - Imprime el tipo de error. |
| 16 | + * - Imprime si no se ha producido ningún error. |
| 17 | + * - Imprime que la ejecución ha finalizado. |
| 18 | +*/ |
| 19 | + |
| 20 | +// |
| 21 | +// Exepciones (try and catch) |
| 22 | +// |
| 23 | + |
| 24 | +// Error al dividir por cero, genero el error |
| 25 | +try { |
| 26 | + const resultado = 10 / 0 |
| 27 | + console.log("🔢 División por cero:", resultado) |
| 28 | +} catch (error) { |
| 29 | + console.error("⚠️ Error al dividir:", error.message) |
| 30 | +} |
| 31 | +console.log("✅ El programa continúa tras dividir por cero") |
| 32 | + |
| 33 | +// Error al acceder a un indice que no existe |
| 34 | +try { |
| 35 | + const lista = [1, 2, 3] |
| 36 | + const valor = lista[10].toString() |
| 37 | + console.log("📦 Valor accedido:", valor) |
| 38 | +} catch (error) { |
| 39 | + console.error("🚨 Error al acceder a índice inexistente:", error.message) |
| 40 | +} |
| 41 | +console.log("✅ El programa continúa tras acceder a un índice no existente\n") |
| 42 | + |
| 43 | +// Error en un listado |
| 44 | +try { |
| 45 | + const texto = '{"nombre": "Gian", "edad": }' |
| 46 | + const objeto = JSON.parse(texto) |
| 47 | +} catch (error) { |
| 48 | + console.error("❌ Error al parsear JSON:", error.message) |
| 49 | +} |
| 50 | +console.log("✅ El programa continúa tras fallo en JSON\n") |
| 51 | + |
| 52 | +// Error personalizado |
| 53 | +function dividir(a, b) { |
| 54 | + if (b === 0) throw new Error("No se puede dividir por cero (personalizado)") |
| 55 | + return a / b |
| 56 | +} |
| 57 | + |
| 58 | +try { |
| 59 | + const resultado = dividir(10, 0) |
| 60 | + console.log("🧮 Resultado personalizado:", resultado) |
| 61 | +} catch (error) { |
| 62 | + console.error("🚫 Error personalizado:", error.message) |
| 63 | +} |
| 64 | +console.log("✅ El programa continúa tras lanzar un error personalizado") |
| 65 | + |
| 66 | +// |
| 67 | +// EXTRA |
| 68 | +// |
| 69 | + |
| 70 | +class MiErrorPersonalizado extends Error { |
| 71 | + constructor(mensaje) { |
| 72 | + super(mensaje) |
| 73 | + this.name = "MiErrorPersonalizado" |
| 74 | + } |
| 75 | +} |
| 76 | + |
| 77 | +function procesarValor(valor) { |
| 78 | + if (typeof valor !== "number") { |
| 79 | + throw new TypeError("El valor no es un número.") |
| 80 | + } |
| 81 | + |
| 82 | + if (valor < 0 || valor > 100) { |
| 83 | + throw new RangeError("El número debe estar entre 0 y 100.") |
| 84 | + } |
| 85 | + |
| 86 | + if (valor === 42) { |
| 87 | + throw new MiErrorPersonalizado("¡42 es un número prohibido!") |
| 88 | + } |
| 89 | + |
| 90 | + return `✅ Valor aceptado: ${valor}` |
| 91 | +} |
| 92 | + |
| 93 | + |
| 94 | +try { |
| 95 | + const resultado = procesarValor(42) |
| 96 | + console.log(resultado) |
| 97 | + console.log("✅ No se produjo ningún error.") |
| 98 | +} catch (error) { |
| 99 | + console.error(`❌ Se capturó un error de tipo: ${error.name}`) |
| 100 | + console.error("📣 Mensaje:", error.message) |
| 101 | +} finally { |
| 102 | + console.log("🏁 La ejecución ha finalizado.") |
| 103 | +} |
0 commit comments