|
| 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 | +namespace challenge_10{ |
| 21 | + // const dividir = (a: number, b: number): number =>{ |
| 22 | + // if (b === 0) { |
| 23 | + // throw new Error("no se puede dividir entre 0") |
| 24 | + // } |
| 25 | + // return a / b |
| 26 | + // } |
| 27 | + |
| 28 | + // try { |
| 29 | + // const resultado = dividir(10,0) |
| 30 | + // console.log(`Resultado: ${resultado}`) |
| 31 | + // } |
| 32 | + // catch(e){ |
| 33 | + // console.error("Se a ocacionado un error: ", (e as Error).message) |
| 34 | + // } |
| 35 | + // console.log("Hola, que pasa!") |
| 36 | + |
| 37 | + class DivisionByZeroError extends Error{ |
| 38 | + constructor(){ |
| 39 | + super("No se puede dividir por 0") |
| 40 | + this.name = "DivisionByZeroError" |
| 41 | + } |
| 42 | + } |
| 43 | + |
| 44 | + //* Esta la cree para probar mi conocimiento sobre el tema |
| 45 | + |
| 46 | + class StrTypeError extends Error{ |
| 47 | + constructor(){ |
| 48 | + super("el parametro no puede ser un string") |
| 49 | + this.name = "StrTypeError" |
| 50 | + } |
| 51 | + } |
| 52 | + |
| 53 | + const process_param = (params: any[])=>{ |
| 54 | + if (params.length < 3) { |
| 55 | + throw new RangeError("El numero de parametros es insuficientes, se esperan al menos 3") |
| 56 | + } else if (params[1] === 0){ |
| 57 | + throw new DivisionByZeroError() |
| 58 | + } else if (typeof params[2] !== "number") { |
| 59 | + // throw new Error("No determiamos la causa del error") -> si ejecuto esta linea de codigo, manda un erro generico |
| 60 | + throw new StrTypeError() |
| 61 | + } |
| 62 | + |
| 63 | + console.log(params) |
| 64 | + console.log(params[0] / params[1]) |
| 65 | + console.log(params[2] + 5) |
| 66 | + } |
| 67 | + try{ |
| 68 | + process_param([1,2,"3",4]) |
| 69 | + } |
| 70 | + catch(e){ |
| 71 | + if (e instanceof RangeError) { |
| 72 | + console.error("Se ha productido el error: ", (e as Error).name, "->", (e as Error).message) |
| 73 | + } else if (e instanceof DivisionByZeroError) { |
| 74 | + console.error("Se ha productido el error: ", (e as Error).name, "->", (e as Error).message) |
| 75 | + } else if (e instanceof StrTypeError){ // no esta funcionando debido a que debia cargar un error generico |
| 76 | + console.error("Se ha productido el error: ", (e as Error).name, "->", (e as Error).message) |
| 77 | + } else if (e as Error) { |
| 78 | + console.error("Se ha productido un error inesperado: ", e) |
| 79 | + } else { |
| 80 | + console.log("no se ha producido ningun error") |
| 81 | + } |
| 82 | + } |
| 83 | + finally{ |
| 84 | + console.log("El programa ha finalizado") |
| 85 | + } |
| 86 | +} |
| 87 | + |
0 commit comments