diff --git a/Roadmap/09 - HERENCIA/typescript/david-git-dev.ts b/Roadmap/09 - HERENCIA/typescript/david-git-dev.ts new file mode 100644 index 0000000000..f5a192642d --- /dev/null +++ b/Roadmap/09 - HERENCIA/typescript/david-git-dev.ts @@ -0,0 +1,117 @@ +/* + * EJERCICIO: + * Explora el concepto de herencia según tu lenguaje. Crea un ejemplo que + * implemente una superclase Animal y un par de subclases Perro y Gato, + * junto con una función que sirva para imprimir el sonido que emite cada Animal + */ +class Animal { + private _habitat: string; + private _dieta: any[]; + constructor(habitat: string, dieta: any[]) { + this._habitat = habitat; + this._dieta = dieta; + } + sonido() { + return "sonido caracteristico de un animal"; + } +} +class Perro extends Animal { + private _nombre: string; + private _especie: string; + + constructor(nombre: string, especie: string, habitat: string, dieta: any[]) { + super(habitat, dieta); + this._nombre = nombre; + this._especie = especie; + } + sonido() { + return "¡Guau guau!"; + } +} +class Gato extends Animal { + private _nombre: string; + private _especie: string; + + constructor(nombre: string, especie: string, habitat: string, dieta: any[]) { + super(habitat, dieta); + this._nombre = nombre; + this._especie = especie; + } + sonido() { + return "¡Miau Miau!"; + } +} +const chauchau = new Perro("canela", "canino", "casa", [ + "croquetas", + "pollo", + "hueso", +]); +chauchau.sonido(); +const naranja = new Gato("sr.tims", "felino", "casa", [ + "croquetas", + "pescado", + "whiskas", +]); +naranja.sonido(); +/* + * + * DIFICULTAD EXTRA (opcional): + * Implementa la jerarquía de una empresa de desarrollo formada por Empleados que + * pueden ser Gerentes, Gerentes de Proyectos o Programadores. + * Cada empleado tiene un identificador y un nombre. + * Dependiendo de su labor, tienen propiedades y funciones exclusivas de su + * actividad, y almacenan los empleados a su cargo. + */ +class Empleado{ + private _identificador:BigInt + private _nombre:string + private _salario:BigInt + private _fechaDeContratacion:Date + constructor(identificador:BigInt,nombre:string,salario:BigInt){ + this._identificador = identificador +this._nombre = nombre + this._salario = salario + } +} +class Gerente extends Empleado{ + private _usuariosACargo: Array + constructor(identificador:BigInt,nombre:string,salario:BigInt,subordinados:Array){ + super(identificador,nombre,salario) + this._usuariosACargo = subordinados + } + visionEstrategica(){ + + } + gestionDeRecursos(){} + tomaDeDecisiones(){} + supervisionGeneral(){} + relacionesExternas(){} +} +class GerenteDeProyecto extends Empleado{ + private _usuariosACargo: Array; + private _proyectosAsignados:Array + constructor(identificador:BigInt,nombre:string,salario:BigInt,subordinados:Array,proyectos:Array){ + super(identificador,nombre,salario) + this._usuariosACargo = subordinados + this._proyectosAsignados = proyectos + } + planificacionDeProyectos(){} + gestionDeEquipos(){} + controlDePresupuestos(){} + seguimientoYReportes(){} + resolucionDeProblemas(){} +} +class Programador extends Empleado{ + private _experiencia:number = 0; + private _proyectosAsignados: Array; + constructor(identificador:BigInt,nombre:string,salario:BigInt,experiencia:number,proyectosAsignados:Proyecto[]){ + super(identificador,nombre,salario) + this._experiencia = experiencia + this._proyectosAsignados = proyectosAsignados + } + escribirCodigo(){} + depurarCodigo(){} + colaborarEnProyectos(){} + actualizarConocimientos(){} +} + diff --git a/Roadmap/10 - EXCEPCIONES/typescript/david-git-dev.ts b/Roadmap/10 - EXCEPCIONES/typescript/david-git-dev.ts new file mode 100644 index 0000000000..23267b53d5 --- /dev/null +++ b/Roadmap/10 - EXCEPCIONES/typescript/david-git-dev.ts @@ -0,0 +1,72 @@ +/* + EJERCICIO: + Explora el concepto de manejo de excepciones según tu lenguaje. + Fuerza un error en tu código, captura el error, imprime dicho error + y evita que el programa se detenga de manera inesperada. + Prueba a dividir "10/0" o acceder a un índice no existente + de un listado para intentar provocar un error. + */ + function isNumeric(x:any) { + return ["number", "bigint"].includes(typeof x); + } + + function sum(...values:any[]) { + if (!values.every(isNumeric)) { + throw new TypeError("Can only add numbers"); + } + return values.reduce((a, b) => a + b); + } + + console.log(sum(1, 2, 3)); // 6 + try { + sum("1", "2"); + } catch (e) { + if(e instanceof Error) + console.error(e); // TypeError: Can only add numbers + } + /* + DIFICULTAD EXTRA (opcional): + Crea una función que sea capaz de procesar parámetros, pero que también + pueda lanzar 3 tipos diferentes de excepciones (una de ellas tiene que + corresponderse con un tipo de excepción creada por nosotros de manera + personalizada, y debe ser lanzada de manera manual) en caso de error. + - Captura todas las excepciones desde el lugar donde llamas a la función. + - Imprime el tipo de error. + - Imprime si no se ha producido ningún error. + - Imprime que la ejecución ha finalizado. + */ +class IHateNineNumberError extends Error { + constructor(mensaje: string) { + super(mensaje); + this.name = "IHateNineNumberError"; // Establece el nombre del error + } +} +function threeErrorTypes(...args:any[]) { + try { + //const divByZero = 1n / 0n; error by zero RangeError + if (args.some((num) => num === 9)) + throw new IHateNineNumberError("dont use 9! number!!!"); + //const res = args[1].content.json; ReferenceError + //args[5] error index of bounce RangeError + } catch (e) { + if(e instanceof Error){ + switch (e.name) { + case "Error": + console.error("Error general"); + break; + case "RangeError": + console.error("Error de rango"); + break; + case "ReferenceError": + console.error("Error de referencia"); + break; + default: + console.error("Vaya esto es nuevo...", e); + break; + } + } + } finally { + console.log("Operacion terminada"); + } +} +threeErrorTypes(1, 9, "response", true); \ No newline at end of file