From f0b66b3066d123e6986e8f07ce466d13089927c9 Mon Sep 17 00:00:00 2001 From: lazaro Date: Tue, 23 Jun 2026 00:33:54 -0400 Subject: [PATCH 1/4] inicio --- .gitignore | 1 - .vscode/launch.json | 17 - Basic/00-helloworld.js | 36 - Basic/01-variables.js | 29 - Basic/02-datatypes.js | 55 - Basic/03-beginner-exercises.js | 24 - Basic/04-operators.js | 109 - Basic/05-operators-exercises.js | 25 - Basic/06-strings.js | 48 - Basic/07-strings-exercises.js | 24 - Basic/08-conditionals.js | 70 - Basic/09-conditionals-exercises.js | 29 - Basic/10-array.js | 104 - Basic/11-set.js | 61 - Basic/12-map.js | 66 - Basic/13-structures-exercises.js | 24 - Basic/14-loops.js | 79 - Basic/15-loops-exercises.js | 26 - Basic/16-functions.js | 117 - Basic/17-functions-exercises.js | 26 - Basic/18-objects.js | 119 - Basic/19-objects-exercises.js | 24 - Basic/20-destructuring-spreading.js | 121 - Basic/21-destructuring-spreading-exercises.js | 25 - Basic/22-classes.js | 193 - Basic/23-classes-exercises.js | 24 - Basic/24-error-handling.js | 111 - Basic/25-error-handling-exercises.js | 24 - Basic/26-console-methods.js | 97 - Basic/27-console-methods-exercises.js | 24 - Basic/28-export-modules.js | 50 - Basic/29-import-modules.js | 37 - Basic/30-import-external-modules.cjs | 13 - Basic/31-modules-exercises.js | 24 - Basic/package.json | 3 - Intermediate/00-advanced-functions.js | 155 - .../01-advanced-functions-exercises.js | 24 - Intermediate/02-advanced-structures.js | 150 - .../03-advanced-structures-exercises.js | 24 - Intermediate/04-advanced-objects.js | 73 - Intermediate/05-advanced-classes.js | 180 - .../06-advanced-objects-classes-exercises.js | 24 - Intermediate/07-async.js | 154 - Intermediate/08-async-exercises.js | 50 - Intermediate/09-apis.js | 171 - Intermediate/10-apis-exercises.js | 24 - Intermediate/11-dom.js | 123 - Intermediate/12-dom-example.html | 23 - Intermediate/13-dom-example.js | 11 - Intermediate/14-tasklist.html | 18 - Intermediate/15-tasklist.js | 32 - Intermediate/16-dom-exercises.js | 24 - Intermediate/17-debugging.js | 29 - Intermediate/18-debugging-exercises.js | 8 - Intermediate/19-regex.js | 38 - Intermediate/20-regex-exercises.js | 12 - Intermediate/21-testing.js | 22 - Intermediate/22-testing.test.js | 14 - Intermediate/23-testing-exercises.js | 10 - package-lock.json | 3389 ----------------- package.json | 15 - 61 files changed, 6656 deletions(-) delete mode 100644 .gitignore delete mode 100644 .vscode/launch.json delete mode 100644 Basic/00-helloworld.js delete mode 100644 Basic/01-variables.js delete mode 100644 Basic/02-datatypes.js delete mode 100644 Basic/03-beginner-exercises.js delete mode 100644 Basic/04-operators.js delete mode 100644 Basic/05-operators-exercises.js delete mode 100644 Basic/06-strings.js delete mode 100644 Basic/07-strings-exercises.js delete mode 100644 Basic/08-conditionals.js delete mode 100644 Basic/09-conditionals-exercises.js delete mode 100644 Basic/10-array.js delete mode 100644 Basic/11-set.js delete mode 100644 Basic/12-map.js delete mode 100644 Basic/13-structures-exercises.js delete mode 100644 Basic/14-loops.js delete mode 100644 Basic/15-loops-exercises.js delete mode 100644 Basic/16-functions.js delete mode 100644 Basic/17-functions-exercises.js delete mode 100644 Basic/18-objects.js delete mode 100644 Basic/19-objects-exercises.js delete mode 100644 Basic/20-destructuring-spreading.js delete mode 100644 Basic/21-destructuring-spreading-exercises.js delete mode 100644 Basic/22-classes.js delete mode 100644 Basic/23-classes-exercises.js delete mode 100644 Basic/24-error-handling.js delete mode 100644 Basic/25-error-handling-exercises.js delete mode 100644 Basic/26-console-methods.js delete mode 100644 Basic/27-console-methods-exercises.js delete mode 100644 Basic/28-export-modules.js delete mode 100644 Basic/29-import-modules.js delete mode 100644 Basic/30-import-external-modules.cjs delete mode 100644 Basic/31-modules-exercises.js delete mode 100644 Basic/package.json delete mode 100644 Intermediate/00-advanced-functions.js delete mode 100644 Intermediate/01-advanced-functions-exercises.js delete mode 100644 Intermediate/02-advanced-structures.js delete mode 100644 Intermediate/03-advanced-structures-exercises.js delete mode 100644 Intermediate/04-advanced-objects.js delete mode 100644 Intermediate/05-advanced-classes.js delete mode 100644 Intermediate/06-advanced-objects-classes-exercises.js delete mode 100644 Intermediate/07-async.js delete mode 100644 Intermediate/08-async-exercises.js delete mode 100644 Intermediate/09-apis.js delete mode 100644 Intermediate/10-apis-exercises.js delete mode 100644 Intermediate/11-dom.js delete mode 100644 Intermediate/12-dom-example.html delete mode 100644 Intermediate/13-dom-example.js delete mode 100644 Intermediate/14-tasklist.html delete mode 100644 Intermediate/15-tasklist.js delete mode 100644 Intermediate/16-dom-exercises.js delete mode 100644 Intermediate/17-debugging.js delete mode 100644 Intermediate/18-debugging-exercises.js delete mode 100644 Intermediate/19-regex.js delete mode 100644 Intermediate/20-regex-exercises.js delete mode 100644 Intermediate/21-testing.js delete mode 100644 Intermediate/22-testing.test.js delete mode 100644 Intermediate/23-testing-exercises.js delete mode 100644 package-lock.json delete mode 100644 package.json diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 40b878db..00000000 --- a/.gitignore +++ /dev/null @@ -1 +0,0 @@ -node_modules/ \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index 8e6b48f2..00000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - { - "type": "node", - "request": "launch", - "name": "Launch Program", - "skipFiles": [ - "/**" - ], - "program": "${workspaceFolder}/Intermediate/17-debugging.js" - } - ] -} \ No newline at end of file diff --git a/Basic/00-helloworld.js b/Basic/00-helloworld.js deleted file mode 100644 index 23a48e6e..00000000 --- a/Basic/00-helloworld.js +++ /dev/null @@ -1,36 +0,0 @@ -/* -Clases 1 a 14 (sin código) -Vídeo: https://youtu.be/1glVfFxj8a4 - -Clase 15 - Hola mundo -Vídeo: https://youtu.be/1glVfFxj8a4?t=2390 -*/ - -// Esto es un comentario simple - -/* -Esto es -un comentario -en varias líneas -*/ - -console.log("¡Hola, JavaScript!") -console.log('¡Hola, JavaScript!') -console.log(`¡Hola, JavaScript!`) - -// console.log("¡Hola, JavaScript!") - -/* -console.log("¡Hola, JavaScript!") -console.log('¡Hola, JavaScript!') -console.log(`¡Hola, JavaScript!`) -*/ - -console.log("5") -console.log(5) -console.log(5 + 2) -console.log(5 - 2) -console.log(5 * 2) -console.log(5 / 2) -console.log(5 % 2) -console.log(5 ** 2) \ No newline at end of file diff --git a/Basic/01-variables.js b/Basic/01-variables.js deleted file mode 100644 index e1f7b6dd..00000000 --- a/Basic/01-variables.js +++ /dev/null @@ -1,29 +0,0 @@ -/* -Clase 16 - Variables -Vídeo: https://youtu.be/1glVfFxj8a4?t=3049 -*/ - -// var - -var helloWorld = "¡Hola, JavaScript!" -console.log(helloWorld) - -helloWorld = "¡Hola de nuevo, JavaScript!" -console.log(helloWorld) - -// let - -let helloWorld2 = "¡Hola, JavaScript 2!" -console.log(helloWorld2) - -helloWorld2 = "¡Hola de nuevo, JavaScript 2!" -console.log(helloWorld2) - -// const - -const helloWorld3 = "¡Hola, JavaScript 3!" -console.log(helloWorld3) - -// Error -// helloWorld3 = "¡Hola de nuevo, JavaScript 2!" -// console.log(helloWorld3) \ No newline at end of file diff --git a/Basic/02-datatypes.js b/Basic/02-datatypes.js deleted file mode 100644 index ab37f6ee..00000000 --- a/Basic/02-datatypes.js +++ /dev/null @@ -1,55 +0,0 @@ -/* -Clase 17 - Tipos de datos -Vídeo: https://youtu.be/1glVfFxj8a4?t=3599 -*/ - -// Tipos de datos primitivos - -// Cadenas de texto (string) -let myName = "Brais Moure" -let alias = 'MoureDev' -let email = `braismoure@mouredev.com` - -// Números (number) -let age = 37 // Entero -let height = 1.77 // Decimal - -// Booleanos (boolean) -let isTeacher = true -let isStudent = false - -// Undefined -let undefinedValue -console.log(undefinedValue) - -// Null -let nullValue = null - -// Symbol - -let mySymbol = Symbol("mysymbol") - -// BigInt - -let myBigInt = BigInt(817239871289371986589716389471628379612983761289376129) -let myBigInt2 = 817239871289371986589716389471628379612983761289376129n - -// Mostramos los tipos de datos -console.log(typeof myName) -console.log(typeof alias) -console.log(typeof email) - -console.log(typeof age) -console.log(typeof height) - -console.log(typeof isTeacher) -console.log(typeof isStudent) - -console.log(typeof undefinedValue) - -console.log(typeof nullValue) - -console.log(typeof mySymbol) - -console.log(typeof myBigInt) -console.log(typeof myBigInt2) \ No newline at end of file diff --git a/Basic/03-beginner-exercises.js b/Basic/03-beginner-exercises.js deleted file mode 100644 index 2e7dd657..00000000 --- a/Basic/03-beginner-exercises.js +++ /dev/null @@ -1,24 +0,0 @@ -/* -Clase 18 - Ejercicios: primeros pasos -Vídeo: https://youtu.be/1glVfFxj8a4?t=4733 -*/ - -// 1. Escribe un comentario en una línea - -// 2. Escribe un comentario en varias líneas - -// 3. Declara variables con valores asociados a todos los datos de tipo primitivos - -// 4. Imprime por consola el valor de todas las variables - -// 5. Imprime por consola el tipo de todas las variables - -// 6. A continuación, modifica los valores de las variables por otros del mismo tipo - -// 7. A continuación, modifica los valores de las variables por otros de distinto tipo - -// 8. Declara constantes con valores asociados a todos los tipos de datos primitivos - -// 9. A continuación, modifica los valores de las constantes - -// 10. Comenta las líneas que produzcan algún tipo de error al ejecutarse \ No newline at end of file diff --git a/Basic/04-operators.js b/Basic/04-operators.js deleted file mode 100644 index cac42886..00000000 --- a/Basic/04-operators.js +++ /dev/null @@ -1,109 +0,0 @@ -/* -Clase 19 - Operadores -Vídeo: https://youtu.be/1glVfFxj8a4?t=4937 -*/ - -// Operadores Aritméticos - -let a = 5 -let b = 10 - -console.log(a + b) // Suma -console.log(a - b) // Resta -console.log(a * b) // Multiplicación -console.log(a / b) // División - -console.log(a % b) // Módulo -console.log(a ** b) // Exponente - -a++ // Incremento -console.log(a) - -b-- // Decremento -console.log(b) - -// Operadores de asignacion - -let myVariable = 2 -console.log(myVariable) -myVariable += 2 // Suma con asignación -console.log(myVariable) - -myVariable -= 2 // Resta con asignación -myVariable *= 2 // Multiplicación con asignación -myVariable /= 2 // División con asignación -myVariable %= 2 // Módulo con asignación -myVariable **= 2 // Exponente con asignación - -// Operadores de comparación - -console.log(a > b) // Mayor que -console.log(a < b) // Menor que -console.log(a >= b) // Mayor o igual que -console.log(a <= b) // Menor o igual que -console.log(a == b) // Igualdad por valor -console.log(a == 6) -console.log(a == "6") -console.log(a == a) -console.log(a === a) // Igualdad por identidad (por tipo y valor) o igualdad estricta -console.log(a === 6) -console.log(a === "6") -console.log(a != 6) // Desigualdad por valor -console.log(a !== "6") // Desigualdad por identidad (por tipo y valor) o desigualdad estricta -console.log(0 == false) -console.log(1 == false) -console.log(2 == false) -console.log(0 == "") -console.log(0 == " ") -console.log(0 == '') -console.log(0 == "Hola") -console.log(0 === "") -console.log(undefined == null) -console.log(undefined === null) - -/* -Truthy values (valores verdaderos) - -- Todos los numeros positivos y negativos menos el cero -- Todas las cadenas de texto menos las vacías -- El boolean true -*/ - -/* -Falsy values (valores falsos) - -- 0 -- 0n -- null -- undefined -- NaN (Not a Number) -- El boolean false -- Cadenas de texto vacías -*/ - -// Operadores lógicos - -// and (&&) -console.log(5 > 10 && 15 > 20) -console.log(5 < 10 && 15 < 20) -console.log(5 < 10 && 15 > 20) -console.log(5 > 10 && 15 > 20 && 30 > 40) - -// or (||) -console.log(5 > 10 || 15 > 20) -console.log(5 < 10 || 15 < 20) -console.log(5 < 10 || 15 > 20) -console.log(5 > 10 || 15 > 20 || 30 > 40) - -console.log(5 > 10 && 15 > 20 || 30 < 40) - -// not (!) -console.log(!true) -console.log(!false) -console.log(!(5 > 10 && 15 > 20)) -console.log(!(5 > 10 || 15 > 20)) - -// Operadores ternarios - -const isRaining = false -isRaining ? console.log("Está lloviendo") : console.log("No está lloviendo") \ No newline at end of file diff --git a/Basic/05-operators-exercises.js b/Basic/05-operators-exercises.js deleted file mode 100644 index a6265eac..00000000 --- a/Basic/05-operators-exercises.js +++ /dev/null @@ -1,25 +0,0 @@ -/* -Clase 20 - Ejercicios: Operadores -Vídeo: https://youtu.be/1glVfFxj8a4?t=6458 -*/ - -// 1. Crea una variable para cada operación aritmética - -// 2. Crea una variable para cada tipo de operación de asignación, -// que haga uso de las variables utilizadas para las operaciones aritméticas - -// 3. Imprime 5 comparaciones verdaderas con diferentes operadores de comparación - -// 4. Imprime 5 comparaciones falsas con diferentes operadores de comparación - -// 5. Utiliza el operador lógico and - -// 6. Utiliza el operador lógico or - -// 7. Combina ambos operadores lógicos - -// 8. Añade alguna negación - -// 9. Utiliza el operador ternario - -// 10. Combina operadores aritméticos, de comparáción y lógicas \ No newline at end of file diff --git a/Basic/06-strings.js b/Basic/06-strings.js deleted file mode 100644 index 8c257b7b..00000000 --- a/Basic/06-strings.js +++ /dev/null @@ -1,48 +0,0 @@ -/* -Clase 21 - Strings -Vídeo: https://youtu.be/1glVfFxj8a4?t=6565 -*/ - -// Strings (cadenas de texto) - -// Concatenación - -let myName = "Brais" -let greeting = "Hola, " + myName + "!" -console.log(greeting) -console.log(typeof greeting) - -// Longitud - -console.log(greeting.length) - -// Acceso a caracteres - -console.log(greeting[0]) -console.log(greeting[11]) - -// Métodos comunes - -console.log(greeting.toUpperCase()) // Mayúsculas -console.log(greeting.toLowerCase()) // Minúsculas -console.log(greeting.indexOf("Hola")) // Índice -console.log(greeting.indexOf("Brais")) -console.log(greeting.indexOf("MoureDev")) -console.log(greeting.includes("Hola")) // Incluye -console.log(greeting.includes("Brais")) -console.log(greeting.includes("MoureDev")) -console.log(greeting.slice(0, 10)) // Sección -console.log(greeting.replace("Brais", "MoureDev")) // Reemplazo - -// Template literals (plantillas literales) - -// Strings en varias líneas -let message = `Hola, este -es mi -curso de -JavaScript` -console.log(message) - -// Interpolación de valores -let email = "braismoure@mouredev.com" -console.log(`Hola, ${myName}! Tu email es ${email}.`) \ No newline at end of file diff --git a/Basic/07-strings-exercises.js b/Basic/07-strings-exercises.js deleted file mode 100644 index c08f0166..00000000 --- a/Basic/07-strings-exercises.js +++ /dev/null @@ -1,24 +0,0 @@ -/* -Clase 22 - Ejercicios: Strings -Vídeo: https://youtu.be/1glVfFxj8a4?t=7226 -*/ - -// 1. Concatena dos cadenas de texto - -// 2. Muestra la longitud de una cadena de texto - -// 3. Muestra el primer y último carácter de un string - -// 4. Convierte a mayúsculas y minúsculas un string - -// 5. Crea una cadena de texto en varias líneas - -// 6. Interpola el valor de una variable en un string - -// 7. Reemplaza todos los espacios en blanco de un string por guiones - -// 8. Comprueba si una cadena de texto contiene una palabra concreta - -// 9. Comprueba si dos strings son iguales - -// 10. Comprueba si dos strings tienen la misma longitud \ No newline at end of file diff --git a/Basic/08-conditionals.js b/Basic/08-conditionals.js deleted file mode 100644 index 22bfcfa2..00000000 --- a/Basic/08-conditionals.js +++ /dev/null @@ -1,70 +0,0 @@ -/* -Clase 23 - Condicionales -Vídeo: https://youtu.be/1glVfFxj8a4?t=7277 -*/ - -// if, else if, else - -// if (si) - -let age = 37 - -if (age == 37) { - console.log("La edad es 37") -} - -// else (si no) - -if (age == 37) { - console.log("La edad es 37") -} else { - console.log("La edad no es 37") -} - -// else if (si no, si) - -if (age == 37) { - console.log("La edad es 37") -} else if (age < 18) { - console.log("Es menor de edad") -} else { - console.log("La edad no es 37 ni es menor de edad") -} - -// Operador ternario - -const message = age == 37 ? "La edad es 37" : "La edad no es 37" -console.log(message) - -// switch - -let day = 3 -let dayName - -switch (day) { - case 0: - dayName = "Lunes" - break - case 1: - dayName = "Martes" - break - case 2: - dayName = "Miércoles" - break - case 3: - dayName = "Jueves" - break - case 4: - dayName = "Viernes" - break - case 5: - dayName = "Sábado" - break - case 6: - dayName = "Domingo" - break - default: - dayName = "Número de día incorrecto" -} - -console.log(dayName) \ No newline at end of file diff --git a/Basic/09-conditionals-exercises.js b/Basic/09-conditionals-exercises.js deleted file mode 100644 index 380e6542..00000000 --- a/Basic/09-conditionals-exercises.js +++ /dev/null @@ -1,29 +0,0 @@ -/* -Clase 24 - Ejercicios: Condicionales -Vídeo: https://youtu.be/1glVfFxj8a4?t=8652 -*/ - -// if/else/else if/ternaria - -// 1. Imprime por consola tu nombre si una variable toma su valor - -// 2. Imprime por consola un mensaje si el usuario y contraseña concide con unos establecidos - -// 3. Verifica si un número es positivo, negativo o cero e imprime un mensaje - -// 4. Verifica si una persona puede votar o no (mayor o igual a 18) e indica cuántos años le faltan - -// 5. Usa el operador ternario para asignar el valor "adulto" o "menor" a una variable -// dependiendo de la edad - -// 6. Muestra en que estación del año nos encontramos dependiendo del valor de una variable "mes" - -// 7. Muestra el número de días que tiene un mes dependiendo de la variable del ejercicio anterior - -// switch - -// 8. Usa un switch para imprimir un mensaje de saludo diferente dependiendo del idioma - -// 9. Usa un switch para hacer de nuevo el ejercicio 6 - -// 10. Usa un switch para hacer de nuevo el ejercicio 7 \ No newline at end of file diff --git a/Basic/10-array.js b/Basic/10-array.js deleted file mode 100644 index b9028147..00000000 --- a/Basic/10-array.js +++ /dev/null @@ -1,104 +0,0 @@ -/* -Clase 25 - Arrays -Vídeo: https://youtu.be/1glVfFxj8a4?t=8741 -*/ - -// Array - -// Declaración - -let myArray = [] -let myArray2 = new Array() - -console.log(myArray) -console.log(myArray2) - -// Inicialización - -myArray = [3] -myArray2 = new Array(3) - -console.log(myArray) -console.log(myArray2) - -myArray = [1, 2, 3, 4] -myArray2 = new Array(1, 2, 3, 4) - -console.log(myArray) -console.log(myArray2) - -myArray = ["Brais", "Moure", "mouredev", 37, true] -myArray2 = new Array("Brais", "Moure", "mouredev", 37, true) - -console.log(myArray) -console.log(myArray2) - -myArray2 = new Array(3) -myArray2[2] = "Brais" -// myArray2[0] = "Moure" -myArray2[1] = "mouredev" -myArray2[4] = "mouredev" - -console.log(myArray2) - -myArray = [] -myArray[2] = "Brais" -// myArray[0] = "Moure" -myArray[1] = "mouredev" - -console.log(myArray) - -// Métodos comunes - -myArray = [] - -// push y pop - -myArray.push("Brais") -myArray.push("Moure") -myArray.push("mouredev") -myArray.push(37) - -console.log(myArray) - -console.log(myArray.pop()) // Elimina el último y lo devuelve -myArray.pop() - -console.log(myArray) - -// shift y unshift - -console.log(myArray.shift()) -console.log(myArray) - -myArray.unshift("Brais", "mouredev") -console.log(myArray) - -// length - -console.log(myArray.length) - -// clear - -myArray = [] -myArray.length = 0 // alternativa -console.log(myArray) - -// slice - -myArray = ["Brais", "Moure", "mouredev", 37, true] - -let myNewArray = myArray.slice(1, 3) - -console.log(myArray) -console.log(myNewArray) - -// splice - -myArray.splice(1, 3) -console.log(myArray) - -myArray = ["Brais", "Moure", "mouredev", 37, true] - -myArray.splice(1, 2, "Nueva entrada") -console.log(myArray) \ No newline at end of file diff --git a/Basic/11-set.js b/Basic/11-set.js deleted file mode 100644 index aab6cf3f..00000000 --- a/Basic/11-set.js +++ /dev/null @@ -1,61 +0,0 @@ -/* -Clase 26 - Sets -Vídeo: https://youtu.be/1glVfFxj8a4?t=9952 -*/ - -// Set - -// Declaración - -let mySet = new Set() - -console.log(mySet) - -// Inicialización - -mySet = new Set(["Brais", "Moure", "mouredev", 37, true, "braismoure@mouredev.com"]) - -console.log(mySet) - -// Métodos comunes - -// add y delete - -mySet.add("https://moure.dev") - -console.log(mySet) - -mySet.delete("https://moure.dev") - -console.log(mySet) - -console.log(mySet.delete("Brais")) -console.log(mySet.delete(4)) - -console.log(mySet) - -// has - -console.log(mySet.has("Moure")) -console.log(mySet.has("Brais")) - -// size - -console.log(mySet.size) - -// Convertir un set a array -let myArray = Array.from(mySet) -console.log(myArray) - -// Convertir un array a set - -mySet = new Set(myArray) -console.log(mySet) - -// No admite duplicados - -mySet.add("braismoure@mouredev.com") -mySet.add("braismoure@mouredev.com") -mySet.add("braismoure@mouredev.com") -mySet.add("BraisMoure@mouredev.com") -console.log(mySet) \ No newline at end of file diff --git a/Basic/12-map.js b/Basic/12-map.js deleted file mode 100644 index b91f3d6c..00000000 --- a/Basic/12-map.js +++ /dev/null @@ -1,66 +0,0 @@ -/* -Clase 27 - Maps -Vídeo: https://youtu.be/1glVfFxj8a4?t=10755 -*/ - -// Map - -// Declaración - -let myMap = new Map() - -console.log(myMap) - -// Inicialiación - -myMap = new Map([ - ["name", "Brais"], - ["email", "braismoure@mouredev.com"], - ["age", 37] -]) - -console.log(myMap) - -// Métodos y propiedades - -// set - -myMap.set("alias", "mouredev") -myMap.set("name", "Brais Moure") - -console.log(myMap) - -// get - -console.log(myMap.get("name")) -console.log(myMap.get("surname")) - -// has - -console.log(myMap.has("surname")) -console.log(myMap.has("age")) - -// delete - -myMap.delete("email") - -console.log(myMap) - -// keys, values y entries - -console.log(myMap.keys()) -console.log(myMap.values()) -console.log(myMap.entries()) - -// size - -console.log(myMap.size) - -// clear - -myMap.clear() - -console.log(myMap) - - - diff --git a/Basic/13-structures-exercises.js b/Basic/13-structures-exercises.js deleted file mode 100644 index 1b094502..00000000 --- a/Basic/13-structures-exercises.js +++ /dev/null @@ -1,24 +0,0 @@ -/* -Clase 28 - Ejercicios: Estructuras -Vídeo: https://youtu.be/1glVfFxj8a4?t=11451 -*/ - -// 1. Crea un array que almacene cinco animales - -// 2. Añade dos más. Uno al principio y otro al final - -// 3. Elimina el que se encuentra en tercera posición - -// 4. Crea un set que almacene cinco libros - -// 5. Añade dos más. Uno de ellos repetido - -// 6. Elimina uno concreto a tu elección - -// 7. Crea un mapa que asocie el número del mes a su nombre - -// 8. Comprueba si el mes número 5 existe en el map e imprime su valor - -// 9. Añade al mapa una clave con un array que almacene los meses de verano - -// 10. Crea un Array, transfórmalo a un Set y almacénalo en un Map \ No newline at end of file diff --git a/Basic/14-loops.js b/Basic/14-loops.js deleted file mode 100644 index 9c404287..00000000 --- a/Basic/14-loops.js +++ /dev/null @@ -1,79 +0,0 @@ -/* -Clase 29 - Bucles -Vídeo: https://youtu.be/1glVfFxj8a4?t=11575 -*/ - -// Loops o bucles - -// for - -for (let i = 0; i < 5; i++) { - console.log(`Hola ${i}`) -} - -const numbers = [1, 2, 3, 4, 5, 6, 7, 8] - -for (let i = 0; i < numbers.length; i++) { - console.log(`Elemento: ${numbers[i]}`) -} - -// while - -let i = 0 -while (i < 5) { - console.log(`Hola ${i}`) - i++ -} - -// Bucle infinito -// while(true) { -// } - -// do while - -i = 6 -do { - console.log(`Hola ${i}`) - i++ -} while (i < 5) - -// for of - -const myArray = [1, 2, 3, 4] - -const mySet = new Set(["Brais", "Moure", "mouredev", 37, true, "braismoure@mouredev.com"]) - -const myMap = new Map([ - ["name", "Brais"], - ["email", "braismoure@mouredev.com"], - ["age", 37] -]) - -const myString = "¡Hola, JavaScript!" - -for (let value of myArray) { - console.log(value) -} - -for (let value of mySet) { - console.log(value) -} - -for (let value of myMap) { - console.log(value) -} - -for (let value of myString) { - console.log(value) -} - -// break y continue - -for (let i = 0; i < 10; i++) { - if (i == 5) { - continue - } else if (i == 7) { - break - } - console.log(`Hola ${i}`) -} \ No newline at end of file diff --git a/Basic/15-loops-exercises.js b/Basic/15-loops-exercises.js deleted file mode 100644 index 2a27cdd0..00000000 --- a/Basic/15-loops-exercises.js +++ /dev/null @@ -1,26 +0,0 @@ -/* -Clase 30 - Ejercicios: Bucles -Vídeo: https://youtu.be/1glVfFxj8a4?t=12732 -*/ - -// NOTA: Explora diferentes sintaxis de bucles para resolver los ejercicios - -// 1. Crea un bucle que imprima los números del 1 al 20 - -// 2. Crea un bucle que sume todos los números del 1 al 100 y muestre el resultado - -// 3. Crea un bucle que imprima todos los números pares entre 1 y 50 - -// 4. Dado un array de nombres, usa un bucle para imprimir cada nombre en la consola - -// 5. Escribe un bucle que cuente el número de vocales en una cadena de texto - -// 6. Dado un array de números, usa un bucle para multiplicar todos los números y mostrar el producto - -// 7. Escribe un bucle que imprima la tabla de multiplicar del 5 - -// 8. Usa un bucle para invertir una cadena de texto - -// 9. Usa un bucle para generar los primeros 10 números de la secuencia de Fibonacci - -// 10. Dado un array de números, usa un bucle para crear un nuevo array que contenga solo los números mayores a 10 \ No newline at end of file diff --git a/Basic/16-functions.js b/Basic/16-functions.js deleted file mode 100644 index b7952a02..00000000 --- a/Basic/16-functions.js +++ /dev/null @@ -1,117 +0,0 @@ -/* -Clase 31 - Funciones -Vídeo: https://youtu.be/1glVfFxj8a4?t=12829 -*/ - -// Funciones - -// Simple - -function myFunc() { - console.log("¡Hola, función!") -} - -for (let i = 0; i < 5; i++) { - myFunc() -} - -// Con parámetros - -function myFuncWithParams(name) { - console.log(`¡Hola, ${name}!`) -} - -myFuncWithParams("Brais") -myFuncWithParams("MoureDev") - -// Funciones anónimas - -const myFunc2 = function (name) { - console.log(`¡Hola, ${name}!`) -} - -myFunc2("Brais Moure") - -// Arrow functions - -const myFunc3 = (name) => { - console.log(`¡Hola, ${name}!`) -} - -const myFunc4 = (name) => console.log(`¡Hola, ${name}!`) - -myFunc3("Brais Moure") -myFunc4("Brais Moure") - -// Parámetros - -function sum(a, b) { - console.log(a + b) -} - -sum(5, 10) -sum(5) -sum() - -function defaultSum(a = 0, b = 0) { - console.log(a + b) -} - -// Por defecto - -defaultSum() -defaultSum(5) -defaultSum(5, 10) -defaultSum(undefined, 5) - -// Retorno de valores - -function mult(a, b) { - return a * b -} - -let result = mult(5, 10) -console.log(result) - -// Funciones anidadas - -function extern() { - console.log("Función externa") - function intern() { - console.log("Función interna") - } - intern() -} - -extern() -// intern() Error: fuera del scope - -// Funciones de orden superior - -function applyFunc(func, param) { - func(param) -} - -applyFunc(myFunc4, "función de orden superior") - -// forEach - -const myArray = [1, 2, 3, 4] - -const mySet = new Set(["Brais", "Moure", "mouredev", 37, true, "braismoure@mouredev.com"]) - -const myMap = new Map([ - ["name", "Brais"], - ["email", "braismoure@mouredev.com"], - ["age", 37] -]) - -myArray.forEach(function (value) { - console.log(value) -}) - -myArray.forEach((value) => console.log(value)) - -mySet.forEach((value) => console.log(value)) - -myMap.forEach((value) => console.log(value)) \ No newline at end of file diff --git a/Basic/17-functions-exercises.js b/Basic/17-functions-exercises.js deleted file mode 100644 index fb7eb4e5..00000000 --- a/Basic/17-functions-exercises.js +++ /dev/null @@ -1,26 +0,0 @@ -/* -Clase 32 - Ejercicios: Funciones -Vídeo: https://youtu.be/1glVfFxj8a4?t=14146 -*/ - -// NOTA: Explora diferentes sintaxis de funciones para resolver los ejercicios - -// 1. Crea una función que reciba dos números y devuelva su suma - -// 2. Crea una función que reciba un array de números y devuelva el mayor de ellos - -// 3. Crea una función que reciba un string y devuelva el número de vocales que contiene - -// 4. Crea una función que reciba un array de strings y devuelva un nuevo array con las strings en mayúsculas - -// 5. Crea una función que reciba un número y devuelva true si es primo, y false en caso contrario - -// 6. Crea una función que reciba dos arrays y devuelva un nuevo array que contenga los elementos comunes entre ambos - -// 7. Crea una función que reciba un array de números y devuelva la suma de todos los números pares - -// 8. Crea una función que reciba un array de números y devuelva un nuevo array con cada número elevado al cuadrado - -// 9. Crea una función que reciba una cadena de texto y devuelva la misma cadena con las palabras en orden inverso - -// 10. Crea una función que calcule el factorial de un número dado \ No newline at end of file diff --git a/Basic/18-objects.js b/Basic/18-objects.js deleted file mode 100644 index 4e71a6b2..00000000 --- a/Basic/18-objects.js +++ /dev/null @@ -1,119 +0,0 @@ -/* -Clase 33 - Objetos -Vídeo: https://youtu.be/1glVfFxj8a4?t=14229 -*/ - -// Objetos - -// Sintaxis - -let person = { - name: "Brais", - age: 37, - alias: "MoureDev" -} - -// Acceso a propiedades - -// Notación punto -console.log(person.name) - -// Notación de corchetes -console.log(person["name"]) - -// Modificación de propiedades - -person.name = "Brais Moure" -console.log(person.name) - -console.log(typeof person.age) -person.age = "37" -console.log(person.age) -console.log(typeof person.age) - -// Eliminación de propiedades - -delete person.age - -console.log(person) - -// Nueva propiedad - -person.email = "braismoure@mouredev.com" -person["age"] = 37 - -console.log(person) - -// Métodos (funciones) - -let person2 = { - name: "Brais", - age: 37, - alias: "MoureDev", - walk: function () { - console.log("La persona camina.") - } -} -person2.walk() - -// Anidación de objetos - -let person3 = { - name: "Brais", - age: 37, - alias: "MoureDev", - walk: function () { - console.log("La persona camina.") - }, - job: { - name: "Programador", - exp: 15, - work: function () { - console.log(`La persona de ${this.age} años de experiencia trabaja.`) - } - } -} - -console.log(person3) - -console.log(person3.name) -console.log(person3.job) -console.log(person3.job.name) -person3.job.work() - -// Igualdad de objetos - -let person4 = { - name: "Brais Moure", - alias: "MoureDev", - email: "braismoure@mouredev.com", - age: 37 -} - -console.log(person) -console.log(person4) - -console.log(person == person4) -console.log(person === person4) - -console.log(person.name == person4.name) - -// Iteración - -for (let key in person4) { - console.log(key + ": " + person4[key]) -} - -// Funciones como objetos - -function Person(name, age) { // Debería ser una clase - this.name = name - this.age = age -} - -let person5 = new Person("Brais", 37) -console.log(person5) -console.log(person5.name) - -console.log(typeof person5) -console.log(typeof person4) \ No newline at end of file diff --git a/Basic/19-objects-exercises.js b/Basic/19-objects-exercises.js deleted file mode 100644 index 5dbbd628..00000000 --- a/Basic/19-objects-exercises.js +++ /dev/null @@ -1,24 +0,0 @@ -/* -Clase 34 - Ejercicios: Objetos -Vídeo: https://youtu.be/1glVfFxj8a4?t=15675 -*/ - -// 1. Crea un objeto con 3 propiedades - -// 2. Accede y muestra su valor - -// 3. Agrega una nueva propiedad - -// 4. Elimina una de las 3 primeras propiedades - -// 5. Agrega una función e invócala - -// 6. Itera las propiedades del objeto - -// 7. Crea un objeto anidado - -// 8. Accede y muestra el valor de las propiedades anidadas - -// 9. Comprueba si los dos objetos creados son iguales - -// 10. Comprueba si dos propiedades diferentes son iguales \ No newline at end of file diff --git a/Basic/20-destructuring-spreading.js b/Basic/20-destructuring-spreading.js deleted file mode 100644 index 385cb24d..00000000 --- a/Basic/20-destructuring-spreading.js +++ /dev/null @@ -1,121 +0,0 @@ -/* -Clase 35 - Desestructuración y propagación -Vídeo: https://youtu.be/1glVfFxj8a4?t=15747 -*/ - -let myArray = [1, 2, 3, 4] - -let person = { - name: "Brais", - age: 37, - alias: "MoureDev" -} - -let myValue = myArray[1] -console.log(myValue) - -let myName = person.name -console.log(myName) - -// Desestructuración - -// Sintaxis arrays - -let [myValue0, myValue1, myValue2, myValue3, myValue4] = myArray -console.log(myValue0) -console.log(myValue1) -console.log(myValue2) -console.log(myValue3) -console.log(myValue4) - -// Sintaxis arrays con valores predeterminados - -let [myValue5 = 0, myValue6 = 0, myValue7 = 0, myValue8 = 0, myValue9 = 0] = myArray -console.log(myValue5) -console.log(myValue6) -console.log(myValue7) -console.log(myValue8) -console.log(myValue9) - -// Ignorar elementos array - -let [myValue10, , , myValue13] = myArray -console.log(myValue10) -console.log(myValue13) - -// Sintaxis objects - -let { name, age, alias } = person -console.log(name) -console.log(age) -console.log(alias) - -// Sintaxis objects con valores predeterminados - -let { name2, age2, alias2, email = "email@email.com" } = person -console.log(name2) // No existe -console.log(age2) // No existe -console.log(alias2) // No existe -console.log(email) - -// Sintaxis objects con nuevos nombres de variables - -let { alias: alias3, name: name3, age: age3 } = person -console.log(name3) -console.log(age3) -console.log(alias3) - -// Objects anidados - -let person3 = { - name: "Brais", - age: 37, - alias: "MoureDev", - walk: function () { - console.log("La persona camina.") - }, - job: { - name: "Programador", - exp: 15, - work: function () { - console.log(`La persona de ${this.age} años de experiencia trabaja.`) - } - } -} - -let { name: name4, job: { name: jobName } } = person3 - -console.log(name4) -console.log(jobName) - -// Propagación (...) - -// Sintaxis arrays - -let myArray2 = [...myArray, 5, 6] - -console.log(myArray2) - -// Copia de arrays - -let myArray3 = [...myArray] - -console.log(myArray3) - -// Combinación de arrays - -let myArray4 = [...myArray, ...myArray2, ...myArray3] - -console.log(myArray4) - -// Sintaxis objects - -let person4 = { ...person, email: "braismoure@mouredev.com" } - -console.log(person4) - -// Copia de objects - -let person5 = { ...person } - -console.log(person5) \ No newline at end of file diff --git a/Basic/21-destructuring-spreading-exercises.js b/Basic/21-destructuring-spreading-exercises.js deleted file mode 100644 index feadceb3..00000000 --- a/Basic/21-destructuring-spreading-exercises.js +++ /dev/null @@ -1,25 +0,0 @@ -/* -Clase 36 - Ejercicios: Desestructuración y propagación -Vídeo: https://youtu.be/1glVfFxj8a4?t=16802 -*/ - -// 1. Usa desestructuración para extraer los dos primeros elementos de un array - -// 2. Usa desestructuración en un array y asigna un valor predeterminado a una variable - -// 3. Usa desestructuración para extraer dos propiedades de un objeto - -// 4. Usa desestructuración para extraer dos propiedades de un objeto y asígnalas -// a nuevas variables con nombres diferentes - -// 5. Usa desestructuración para extraer dos propiedades de un objeto anidado - -// 6. Usa propagación para combinar dos arrays en uno nuevo - -// 7. Usa propagación para crear una copia de un array - -// 8. Usa propagación para combinar dos objetos en uno nuevo - -// 9. Usa propagación para crear una copia de un objeto - -// 10. Combina desestructuración y propagación \ No newline at end of file diff --git a/Basic/22-classes.js b/Basic/22-classes.js deleted file mode 100644 index b95ddc26..00000000 --- a/Basic/22-classes.js +++ /dev/null @@ -1,193 +0,0 @@ -/* -Clase 37 - Clases -Vídeo: https://youtu.be/1glVfFxj8a4?t=16864 -*/ - -// Clases - -class Person { - - constructor(name, age, alias) { - this.name = name - this.age = age - this.alias = alias - } - -} - -// Sintaxis - -let person = new Person("Brais", 37, "MoureDev") -let person2 = new Person("Brais", 37, "MoureDev") - -console.log(person) -console.log(person2) - -console.log(typeof person) - -// Valores por defecto - -class DefaultPerson { - - constructor(name = "Sin nombre", age = 0, alias = "Sin alias") { - this.name = name - this.age = age - this.alias = alias - } - -} - -let person3 = new DefaultPerson("Brais", 37) - -console.log(person3) - -// Acceso a propiedades - -console.log(person3.alias) -console.log(person3["alias"]) - -person3.alias = "MoureDev" - -console.log(person3.alias) - -// Funciones en clases - -class PersonWithMethod { - - constructor(name, age, alias) { - this.name = name - this.age = age - this.alias = alias - } - - walk() { - console.log("La persona camina.") - } - -} - -let person4 = new PersonWithMethod("Brais", 37, "MoureDev") -person4.walk() - -// Propiedades privadas - -class PrivatePerson { - - #bank - - constructor(name, age, alias, bank) { - this.name = name - this.age = age - this.alias = alias - this.#bank = bank - } - - pay() { - this.#bank - } - -} - -let person5 = new PrivatePerson("Brais", 37, "MoureDev", "IBAN123456789") - -// No podemos acceder -// console.log(person5.bank) -// person5.bank = "new IBAN123456789" // bank no es #bank - -console.log(person5) - -// Getters y Setters - -class GetSetPerson { - - #name - #age - #alias - #bank - - constructor(name, age, alias, bank) { - this.#name = name - this.#age = age - this.#alias = alias - this.#bank = bank - } - - get name() { - return this.#name - } - - set bank(bank) { - this.#bank = bank - } - -} - -person6 = new GetSetPerson("Brais", 37, "MoureDev", "IBAN123456789") - -console.log(person6) -console.log(person6.name) - -person6.bank = "new IBAN123456789" - -/* -Clase 38 - Herencia de clases -Vídeo: https://youtu.be/1glVfFxj8a4?t=17999 -*/ - -// Herencia - -class Animal { - - constructor(name) { - this.name = name - } - - sound() { - console.log("El animal emite un sonido genérico") - } - -} - -class Dog extends Animal { - - sound() { - console.log("Guau!") - } - - run() { - console.log("El perro corre") - } - -} - -class Fish extends Animal { - - constructor(name, size) { - super(name) - this.size = size - } - - swim() { - console.log("El pez nada") - } - -} - -let myDog = new Dog("MoureDog") -myDog.run() -myDog.sound() - -let myFish = new Fish("MoureFish", 10) -myFish.swim() -myFish.sound() - -// Métodos estáticos - -class MathOperations { - - static sum(a, b) { - return a + b - } -} - -console.log(MathOperations.sum(5, 10)) \ No newline at end of file diff --git a/Basic/23-classes-exercises.js b/Basic/23-classes-exercises.js deleted file mode 100644 index e26e0232..00000000 --- a/Basic/23-classes-exercises.js +++ /dev/null @@ -1,24 +0,0 @@ -/* -Clase 39 - Ejercicios: Clases -Vídeo: https://youtu.be/1glVfFxj8a4?t=18630 -*/ - -// 1. Crea una clase que reciba dos propiedades - -// 2. Añade un método a la clase que utilice las propiedades - -// 3. Muestra los valores de las propiedades e invoca a la función - -// 4. Añade un método estático a la primera clase - -// 5. Haz uso del método estático - -// 6. Crea una clase que haga uso de herencia - -// 7. Crea una clase que haga uso de getters y setters - -// 8. Modifica la clase con getters y setters para que use propiedades privadas - -// 9. Utiliza los get y set y muestra sus valores - -// 10. Sobrescribe un método de una clase que utilice herencia \ No newline at end of file diff --git a/Basic/24-error-handling.js b/Basic/24-error-handling.js deleted file mode 100644 index 43cb9d9d..00000000 --- a/Basic/24-error-handling.js +++ /dev/null @@ -1,111 +0,0 @@ -/* -Clase 40 - Manejo de errores -Vídeo: https://youtu.be/1glVfFxj8a4?t=18751 -*/ - -// Excepción - -// Produce una excepción -let myObject -// console.log(myObject.email) - -// Captura de errores - -// try-catch - -try { - // Código que intenta ejecutar - console.log(myObject.email) - console.log("Finaliza la ejecución sin errores") -} catch { - // Bloque de error - console.log("Se ha producido un error") -} - -// Captura del error - -try { - console.log(myObject.email) -} catch (error) { - console.log("Se ha producido un error:", error.message) -} - -// finally - -try { - console.log(myObject.email) -} catch (error) { - console.log("Se ha producido un error:", error.message) -} finally { - console.log("Este código se ejecuta siempre") -} - -// No está soportado -// try { -// console.log(myObject.email) -// } finally { -// console.log("Este código se ejecuta siempre") -// } - -// Lanzamiento de errores - -// throw - -// throw new Error("Se ha producido un error") - -function sumIntegers(a, b) { - if (typeof a !== "number" || typeof b !== "number") { - throw new TypeError("Esta operación sólo suma números") - } - if (!Number.isInteger(a) || !Number.isInteger(b)) { - throw new Error("Esta operación sólo suma números enteros") - } - if (a == 0 || b == 0) { - throw new SumZeroIntegerError("Se está intentando sumar cero", a, b) - } - return a + b -} - -try { - console.log(sumIntegers(5, 10)) - // console.log(sumIntegers(5.5, 10)) - console.log(sumIntegers("5", 10)) - // console.log(sumIntegers(5, "10")) - // console.log(sumIntegers("5", "10")) -} catch (error) { - console.log("Se ha producido un error:", error.message) -} - -// Capturar varios tipos de errores - -try { - // console.log(sumIntegers(5.5, 10)) - console.log(sumIntegers("5", 10)) -} catch (error) { - if (error instanceof TypeError) { - console.log("Se ha producido un error de tipo:", error.message) - } else if (error instanceof Error) { - console.log("Se ha producido un error:", error.message) - } -} - -// Crear excepciones personalizadas - -class SumZeroIntegerError extends Error { - constructor(message, a, b) { - super(message) - this.a = a - this.b = b - } - - printNumbers() { - console.log(this.a, " + ", this.b) - } -} - -try { - console.log(sumIntegers(0, 10)) -} catch (error) { - console.log("Se ha producido un error personalizado:", error.message) - error.printNumbers() -} \ No newline at end of file diff --git a/Basic/25-error-handling-exercises.js b/Basic/25-error-handling-exercises.js deleted file mode 100644 index 5e227586..00000000 --- a/Basic/25-error-handling-exercises.js +++ /dev/null @@ -1,24 +0,0 @@ -/* -Clase 41 - Ejercicios: Manejo de errores -Vídeo: https://youtu.be/1glVfFxj8a4?t=20392 -*/ - -// 1. Captura una excepción utilizando try-catch - -// 2. Captura una excepción utilizando try-catch y finally - -// 3. Lanza una excepción genérica - -// 4. Crea una excepción personalizada - -// 5. Lanza una excepción personalizada - -// 6. Lanza varias excepciones según una lógica definida - -// 7. Captura varias excepciones en un mismo try-catch - -// 8. Crea un bucle que intente transformar a float cada valor y capture y muestre los errores - -// 9. Crea una función que verifique si un objeto tiene una propiedad específica y lance una excepción personalizada - -// 10. Crea una función que realice reintentos en caso de error hasta un máximo de 10 \ No newline at end of file diff --git a/Basic/26-console-methods.js b/Basic/26-console-methods.js deleted file mode 100644 index e5f9177d..00000000 --- a/Basic/26-console-methods.js +++ /dev/null @@ -1,97 +0,0 @@ -/* -Clase 42 - Console -Vídeo: https://youtu.be/1glVfFxj8a4?t=20444 -*/ - -// Console - -// log - -console.log("¡Hola, JavaScript!") - -// error - -console.error("Este es un mensaje de error.") -console.error("Error al conectarse a la base de datos: ", new Error("Conexión fallida.")) - -// warn - -console.warn("Este es un mensaje de advertencia.") - -// info - -console.info("Este es un mensaje de información adicional.") - -// table - -let data = [ - ["Brais", 37], - ["Sara", 21] -] - -console.table(data) - -data = [ - { name: "Brais", age: 37 }, - { name: "Sara", age: 21 } -] - -console.table(data) - -// group - -console.group("Usuario:") -console.log("Nombre: Brais") -console.log("Edad: 37") -console.groupEnd() - -// time - -console.time("Tiempo de ejecución 2") - -for (let i = 0; i < 10000; i++) { - -} - -console.time("Tiempo de ejecución 1") - -for (let i = 0; i < 10000; i++) { - -} - -console.timeEnd("Tiempo de ejecución 2") - -for (let i = 0; i < 10000; i++) { - -} - -console.timeEnd("Tiempo de ejecución 1") - -// assert - -let age = 17 -console.assert(age >= 18, "El usuario debe ser mayor de edad.") - -// count - -console.count("Click") -console.count("Click") -console.count("Click") -console.countReset("Click") -console.count("Click") - -// trace - -function funcA() { - funcB() -} - -function funcB() { - console.trace("Seguimiento de la ejecución.") -} - -funcA() - -// clear - -// console.clear() \ No newline at end of file diff --git a/Basic/27-console-methods-exercises.js b/Basic/27-console-methods-exercises.js deleted file mode 100644 index 9c38919b..00000000 --- a/Basic/27-console-methods-exercises.js +++ /dev/null @@ -1,24 +0,0 @@ -/* -Clase 43 - Ejercicios: Console -Vídeo: https://youtu.be/1glVfFxj8a4?t=21421 -*/ - -// 1. Crea un función que utilice error correctamente - -// 2. Crea una función que utilice warn correctamente - -// 3. Crea una función que utilice info correctamente - -// 4. Utiliza table - -// 5. Utiliza group - -// 6. Utiliza time - -// 7. Valida con assert si un número es positivo - -// 8. Utiliza count - -// 9. Utiliza trace - -// 10. Utiliza clear \ No newline at end of file diff --git a/Basic/28-export-modules.js b/Basic/28-export-modules.js deleted file mode 100644 index 42f92679..00000000 --- a/Basic/28-export-modules.js +++ /dev/null @@ -1,50 +0,0 @@ -/* -Clase 44 - Módulos -Vídeo: https://youtu.be/1glVfFxj8a4?t=21480 -*/ - -// Exportación de módulos - -// Funciones - -export function add(a, b) { - return a + b -} - -console.log(add(5, 10)) - -// Propiedades - -export const PI = 3.1416 -export let name = "MoureDev" - -// Clases - -export class Circle { - - constructor(radius) { - this.radius = radius - } - - area() { - return Math.PI * Math.pow(this.radius, 2) - } - - perimeter() { - return 2 * Math.PI * this.radius - } - -} - -// Exportación por defecto - -export default function substract(a, b) { - return a - b -} - -// export default class MyClass { - -// func() { -// console.log("Mi clase") -// } -// } diff --git a/Basic/29-import-modules.js b/Basic/29-import-modules.js deleted file mode 100644 index e702dc84..00000000 --- a/Basic/29-import-modules.js +++ /dev/null @@ -1,37 +0,0 @@ -/* -Clase 44 - Módulos -Vídeo: https://youtu.be/1glVfFxj8a4?t=21480 -*/ - -// Importación de módulos - -import { add, PI, name, Circle } from "./28-export-modules.js" - -import defaultImport from "./28-export-modules.js" - -// Funciones - -console.log(add(5, 10)) - -// Propiedades - -console.log(PI) -console.log(name) - -// Clases - -let circle = new Circle(10) -console.log(circle.radius) -console.log(circle.area().toFixed(2)) -console.log(circle.perimeter().toFixed(2)) - -// Importación por defecto - -console.log(defaultImport(5, 10)) - -// let myClass = new defaultImport() -// myClass.func() - -// Proyecto modular - -// import { MyImport } from "./directory/file.js" \ No newline at end of file diff --git a/Basic/30-import-external-modules.cjs b/Basic/30-import-external-modules.cjs deleted file mode 100644 index 5718b5d4..00000000 --- a/Basic/30-import-external-modules.cjs +++ /dev/null @@ -1,13 +0,0 @@ -/* -Clase 44 - Módulos -Vídeo: https://youtu.be/1glVfFxj8a4?t=21480 -*/ - -// Módulos externos - -const os = require("os") - -console.log(os.platform()) -console.log(os.arch()) -console.log(os.totalmem()) -console.log(os.freemem()) \ No newline at end of file diff --git a/Basic/31-modules-exercises.js b/Basic/31-modules-exercises.js deleted file mode 100644 index a09c62b9..00000000 --- a/Basic/31-modules-exercises.js +++ /dev/null @@ -1,24 +0,0 @@ -/* -Clase 45 - Ejercicios: Módulos -Vídeo: https://youtu.be/1glVfFxj8a4?t=22720 -*/ - -// 1. Exporta una función - -// 2. Exporta una constante - -// 3. Exporta una clase - -// 4. Importa una función - -// 5. Importa una constante - -// 6. Importa una clase - -// 7. Exporta una función, una constante y una clase por defecto (en caso de que lo permita) - -// 8. Importa una función, una constante y una clase por defecto (en caso de que lo permita) - -// 9. Exporta una función, una constante y una clase desde una carpeta - -// 10. Importa una función, una constante y una clase desde un directorio diferente al anterior \ No newline at end of file diff --git a/Basic/package.json b/Basic/package.json deleted file mode 100644 index 96ae6e57..00000000 --- a/Basic/package.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "type": "module" -} \ No newline at end of file diff --git a/Intermediate/00-advanced-functions.js b/Intermediate/00-advanced-functions.js deleted file mode 100644 index e2094d5f..00000000 --- a/Intermediate/00-advanced-functions.js +++ /dev/null @@ -1,155 +0,0 @@ -/* -Clases 2 a 11 - Funciones avanzadas -Vídeo: https://youtu.be/iJvLAZ8MJ2E?t=346 -*/ - -// Ciudadanos de primera clase - -const greet = function (name) { - console.log(`Hola, ${name}`) -} - -greet("Brais") - -function processGreeting(greetFunction, name) { - greetFunction(name) -} - -function returnGreeting() { - return greet -} - -processGreeting(greet, "MoureDev") -const greet2 = returnGreeting() -greet2("Brais Moure") - -// Arrow functions avanzadas - -// - Retorno implícito -const multiply = (a, b) => a * b -console.log(multiply(2, 5)) - -// - this léxico -const handler = { - name: "Brais", - greeting: function () { - console.log(`Hola, ${this.name}`) - }, - arrowGreeting: () => { - console.log(`Hola, ${this.name}`) - } -} - -handler.greeting() -handler.arrowGreeting(); - -// IIFE (Expresión de Función Invocada Inmediatamente) - -(function () { - console.log("IIFE clásico") -})(); - -(() => { - console.log("IIFE con arrow function") -})(); - -// Parámetros Rest (...) - -function sum(...numbers) { - let result = 0 - for (let number of numbers) { - result += number - } - return result -} - -console.log(sum(1, 2, 3, 4, 5)) -console.log(sum(10, 15)) - -// Operador Spread (...) - -const numbers = [1, 2, 3] -function sumWithSpread(a, b, c) { - return a + b + c -} - -console.log(sumWithSpread(1, 2, 3)) // Sin Spread -console.log(sumWithSpread(...numbers)) // Con Spread - -// Closures (Clausuras) - -function createCounter() { - let counter = 0 - return function () { - counter++ - console.log(`Contador: ${counter}`) - } -} - -const counter = createCounter() -counter() -counter() -counter() -counter() - -// Recursividad - -function factorial(n) { - if (n <= 1) { - return 1 - } - return n * factorial(n - 1) -} - -console.log(factorial(5)) - -// Funciones parciales - -function partialSum(a) { - return function (b, c) { - return sum(a, b, c) - } -} - -const sumWith = partialSum(4) -console.log(sumWith(2, 3)) -console.log(sumWith(1, 2)) - -// Currying - -function currySum(a) { - return function (b) { - return function (c) { - return function (d) { - return sum(a, b, c, d) - } - } - } -} - -const sumAB = currySum(1)(2) -const sumC = sumAB(3) -console.log(sumC(3)) -console.log(sumC(4)) -console.log(sumAB(5)(7)) - -// Callbacks - -function processData(data, callback) { - const result = sum(...data) - callback(result) -} - -function processResult(result) { - console.log(result) -} - -function processResult2(result) { - console.log(`Mi resultado es: ${result}`) -} - -processData([1, 2, 3], processResult) -processData([1, 2, 3], processResult2) -processData([1, 2, 3], (result) => { - console.log(`Mi resultado en la arrow function es: ${result}`) -}) \ No newline at end of file diff --git a/Intermediate/01-advanced-functions-exercises.js b/Intermediate/01-advanced-functions-exercises.js deleted file mode 100644 index 2d182882..00000000 --- a/Intermediate/01-advanced-functions-exercises.js +++ /dev/null @@ -1,24 +0,0 @@ -/* -Clase 12 - Funciones avanzadas -Vídeo: https://youtu.be/iJvLAZ8MJ2E?t=4112 -*/ - -// 1. Crea una función que retorne a otra función - -// 2. Implementa una función currificada que multiplique 3 números - -// 3. Desarrolla una función recursiva que calcule la potencia de un número elevado a un exponente - -// 4. Crea una función createCounter() que reciba un valor inicial y retorne un objeto con métodos para increment(), decrement() y getValue(), utilizando un closure para mantener el estado - -// 5. Crea una función sumManyTimes(multiplier, ...numbers) que primero sume todos los números (usando parámetros Rest) y luego multiplique el resultado por multiplier - -// 6. Crea un Callback que se invoque con el resultado de la suma de todos los números que se le pasan a una función - -// 7. Desarrolla una función parcial - -// 8. Implementa un ejemplo que haga uso de Spread - -// 9. Implementa un retorno implícito - -// 10. Haz uso del this léxico \ No newline at end of file diff --git a/Intermediate/02-advanced-structures.js b/Intermediate/02-advanced-structures.js deleted file mode 100644 index 52245b08..00000000 --- a/Intermediate/02-advanced-structures.js +++ /dev/null @@ -1,150 +0,0 @@ -/* -Clases 13 a 22 - Estructuras avanzadas -Vídeo: https://youtu.be/iJvLAZ8MJ2E?t=4355 -*/ - -// Arrays avanzados - -// - Métodos funcionales - -// forEach - -let numbers = [1, 2, 3, 4, 5, 6] - -numbers.forEach(element => console.log(element)) - -// map - -let doubled = numbers.map(element => element * 2) -console.log(doubled) - -// filter - -let evens = numbers.filter(element => element % 2 === 0) -console.log(evens) - -// reduce - -let sum = numbers.reduce((result, current) => result + current, 0) -console.log(sum) - -// - Manipulación - -// flat - -let nestedArray = [1, [2, [3, [4]]]] -console.log(nestedArray) -let flatArray = nestedArray.flat(1) -console.log(flatArray) -flatArray = nestedArray.flat(2) -console.log(flatArray) -flatArray = nestedArray.flat(3) -console.log(flatArray) - -// flatMap - -let phrases = ["Hola mundo", "Adiós mundo"] -let words = phrases.flatMap(phrase => phrase.split(" ")) -console.log(words) - -// - Ordenación - -// sort - -let unsorted = ["b", "a", "d", "c"] -let sorted = unsorted.sort() -console.log(sorted) - -unsorted = [3, 4, 1, 6, 10] -sorted = unsorted.sort((a, b) => a - b) - -console.log(sorted) - -// reverse - -sorted.reverse() -console.log(sorted) - -// - Búsqueda - -// includes - -console.log(sorted.includes(4)) -console.log(sorted.includes(5)) - -// find - -let firstEven = sorted.find(element => element % 2 === 0) -console.log(firstEven) - -// findIndex - -let firstEvenIndex = sorted.findIndex(element => element % 2 === 0) -console.log(firstEvenIndex) - -// Sets avanzados - -// - Operaciones - -// Eliminación de duplicados - -let numbersArray = [1, 2, 2, 3, 4, 5, 6, 6] -numbersArray = [...new Set(numbersArray)] -console.log(numbersArray) - -// Unión - -const setA = new Set([1, 2, 3]) -const setB = new Set([2, 3, 4, 5]) -const union = new Set([...setA, ...setB]) -console.log(union) - -// Intersección - -const intersection = new Set([...setA].filter(element => setB.has(element))) -console.log(intersection) - -// Diferencia - -const difference = new Set([...setA].filter(element => !setB.has(element))) -console.log(difference) - -// - Conversión - -// Set a Array - -console.log([...setA]) - -// - Iteración - -// forEach - -setA.forEach(element => console.log(element)) - -// Maps avanzados - -// - Iteración - -let myMap = new Map([ - ["name", "MoureDev"], - ["age", 37] -]) - -myMap.forEach((value, key) => console.log(`${key}: ${value}`)) - -// - Conversión - -// Map a Array - -const arrayFromMap = Array.from(myMap) -console.log(arrayFromMap) - -// Map a Objeto - -const objectFromMap = Object.fromEntries(myMap) -console.log(objectFromMap) - -// Objeto a Map - -const mapFromObject = new Map(Object.entries(objectFromMap)) -console.log(mapFromObject) \ No newline at end of file diff --git a/Intermediate/03-advanced-structures-exercises.js b/Intermediate/03-advanced-structures-exercises.js deleted file mode 100644 index c633ef28..00000000 --- a/Intermediate/03-advanced-structures-exercises.js +++ /dev/null @@ -1,24 +0,0 @@ -/* -Clase 23 - Estructuras avanzadas -Vídeo: https://youtu.be/iJvLAZ8MJ2E?t=7514 -*/ - -// 1. Utiliza map, filter y reduce para crear un ejemplo diferente al de la lección - -// 2. Dado un array de números, crea uno nuevo con dichos números elevados al cubo y filtra sólo los números pares - -// 3. Utiliza flat y flatMap para crear un ejemplo diferente al de la lección - -// 4. Ordena un array de números de mayor a menor - -// 5. Dados dos sets, encuentra la unión, intersección y diferencia de ellos - -// 6. Itera los resultados del ejercicio anterior - -// 7. Crea un mapa que almacene información se usuarios (nombre, edad y email) e itera los datos - -// 8. Dado el mapa anterior, crea un array con los nombres - -// 9. Dado el mapa anterior, obtén un array con los email de los usuarios mayores de edad y transfórmalo a un set - -// 10. Transforma el mapa en un objeto, a continuación, transforma el objeto en un mapa con clave el email de cada usuario y como valor todos los datos del usuario \ No newline at end of file diff --git a/Intermediate/04-advanced-objects.js b/Intermediate/04-advanced-objects.js deleted file mode 100644 index d99a0250..00000000 --- a/Intermediate/04-advanced-objects.js +++ /dev/null @@ -1,73 +0,0 @@ -/* -Clases 24 a 28 - Objetos y clases avanzados -Vídeo: https://youtu.be/iJvLAZ8MJ2E?t=7639 -*/ - -// Objetos avanzados - -// - Prototipos y Herencia - -// Prototipos - -let person = { - name: "Brais", - age: 37, - greet() { - console.log(`Hola, soy ${this.name}`) - } -} - -console.log(person.__proto__) -console.log(Object.getPrototypeOf(person)) - -person.sayAge = function () { - console.log(`Tengo ${this.age} años`) -} - -console.log(person) -person.sayAge() - -// Herencia - -let programmer = Object.create(person) -programmer.language = "JavaScript" - -programmer.name = "MoureDev" -console.log(person.name) -console.log(person.language) - -console.log(programmer.name) -console.log(programmer.age) -console.log(programmer.language) -programmer.greet() -programmer.sayAge() - -// - Métodos estáticos y de instancia - -function Person(name, age) { - this.name = name - this.age = age -} - -Person.prototype.greet = function () { - console.log(`Hola, soy ${this.name}`) -} - -let newPerson = new Person("Brais", 37) -newPerson.greet() - -// - Métodos avanzados - -// assign - -let personCore = { name: "Brais" } -let personDetails = { age: 37, alias: "MoureDev" } - -let fullPerson = Object.assign(personCore, personDetails) -console.log(fullPerson) - -// keys, values, entries - -console.log(Object.keys(fullPerson)) -console.log(Object.values(fullPerson)) -console.log(Object.entries(fullPerson)) \ No newline at end of file diff --git a/Intermediate/05-advanced-classes.js b/Intermediate/05-advanced-classes.js deleted file mode 100644 index 61c086d6..00000000 --- a/Intermediate/05-advanced-classes.js +++ /dev/null @@ -1,180 +0,0 @@ -/* -Clases 29 a 37 - Objetos y clases avanzados -Vídeo: https://youtu.be/iJvLAZ8MJ2E?t=9096 -*/ - -// Clases avanzadas - -class Person { - constructor(name, age) { - this.name = name - this.age = age - } - - greet() { - console.log(`Hola, soy ${this.name}`) - } -} - -const person = new Person("Brais", 37) -person.greet() - -person.sayAge = function () { - console.log(`Tengo ${this.age} años`) -} -person.sayAge() - -// - Abstracción - -class Animal { - constructor(name) { - if (new.target === Animal) { - throw new Error("No se puede instanciar una clase abstracta") - } - this.name = name - } - - makeSound() { - throw new Error("Este método tiene que ser implementado por la subclase") - } -} - -// Error -// const animal = new Animal("Mou") -// console.log(animal) - -// - Polimorfismo - -class Cat extends Animal { - - makeSound() { - console.log("Miau!") - } -} - -class Dog extends Animal { - - makeSound() { - console.log("Guau!") - } -} - -const cat = new Cat("MoureCat") -console.log(cat) -cat.makeSound() - -const dog = new Dog("MoureDog") -console.log(dog) -dog.makeSound() - -// - Mixins - -const FlyMixin = { - fly() { - console.log(`${this.name} está volando`) - } -} - -class Bird extends Animal { } - -class Dragon extends Animal { } - -Object.assign(Bird.prototype, FlyMixin) -Object.assign(Dragon.prototype, FlyMixin) - -const bird = new Bird("MoureBird") - -console.log(bird.name) -bird.fly() - -const dragon = new Dragon("MoureDragon") - -console.log(dragon.name) -dragon.fly() - -// - Patrón Singleton - -class Session { - - constructor(name) { - if (Session.instance) { - return Session.instance - } - this.name = name - Session.instance = this - } -} - -const session1 = new Session("Brais Moure") -const session2 = new Session() -console.log(session1.name) -console.log(session2.name) -console.log(session1 === session2) - -const session3 = new Session("MoureDev") -console.log(session3.name) -console.log(session2 === session3) - -// - Symbol - -const ID = Symbol("id") - -class User { - constructor(name) { - this.name = name - this[ID] = Math.random() - } - - getId() { - return this[ID] - } -} - -const user = new User("Brais") -console.log(user.name) -console.log(user.ID) -console.log(user.getId()) - -// - instanceof - -class Car { } - -const car = new Car() - -console.log(car instanceof Car) - -// - create - -const anotherCar = Object.create(Car.prototype) - -console.log(anotherCar instanceof Car) - -// - Proxy - -const proxy = { - get(target, property) { - console.log(`Se accede a la propiedad ${property}`) - return target[property] - }, - set(target, property, value) { - if (property === "balance" && value < 0) { - throw new Error("El saldo no puede ser negativo") - } - target[property] = value - } -} - -class BankAccount { - constructor(balance) { - this.balance = balance - } -} - -const account = new Proxy(new BankAccount(100), proxy) -console.log(account.balance) - -account.balance = 50 -console.log(account.balance) - -// Error -// account.balance = -10 \ No newline at end of file diff --git a/Intermediate/06-advanced-objects-classes-exercises.js b/Intermediate/06-advanced-objects-classes-exercises.js deleted file mode 100644 index af2d1192..00000000 --- a/Intermediate/06-advanced-objects-classes-exercises.js +++ /dev/null @@ -1,24 +0,0 @@ -/* -Clase 38 - Objetos y clases avanzados -Vídeo: https://youtu.be/iJvLAZ8MJ2E?t=11832 -*/ - -// 1. Agregega una función al prototipo de un objeto - -// 2. Crea un objeto que herede de otro - -// 3. Define un método de instancia en un objeto - -// 4. Haz uso de get y set en un objeto - -// 5. Utiliza la operación assign en un objeto - -// 6. Crea una clase abstracta - -// 7. Utiliza polimorfismo en dos clases diferentes - -// 8. Implementa un Mixin - -// 9. Crea un Singleton - -// 10. Desarrolla un Proxy \ No newline at end of file diff --git a/Intermediate/07-async.js b/Intermediate/07-async.js deleted file mode 100644 index 376131fc..00000000 --- a/Intermediate/07-async.js +++ /dev/null @@ -1,154 +0,0 @@ -/* -Clases 39 a 44 - Asincronía -Vídeo: https://youtu.be/iJvLAZ8MJ2E?t=11890 -*/ - -// Programación asíncrona - -// Código síncrono - -console.log("Inicio") - -for (let i = 0; i < 100000000; i++) { } - -console.log("Fin") - -// Event Loop (Bucle de eventos) - -// Componentes del Event Loop: -// 1. Call Stack (Pila de ejecución) -// 2. Web APIs (APIs del navegador) o Node.js: -// 3. Task Queue (setTimeout()) y Microtask Queue (Promesas) - -// Flujo del Event Loop: -// 1. Call Stack -// 2. Operaciones asíncronas -> Web APIs o Node.js -// 3. Operación termina -> La coloca en Task Queue o Microtask Queue -// 4. Si Call Stack vacío -> Mueve tareas del Microtask Queue o Task Queue al Call Stack -// 5. El proceso se repite - -// Código asíncrono - -// - Callbacks - -console.log("Inicio") - -setTimeout(() => { - console.log("Esto se ejecuta después de 2 segundos") -}, 2000) - -console.log("Fin") - -// - Problema: Callback Hell - -function step1(callback) { - setTimeout(() => { - console.log("Paso 1 completado") - callback() - }, 1000) -} - -function step2(callback) { - setTimeout(() => { - console.log("Paso 2 completado") - callback() - }, 1000) -} - -function step3(callback) { - setTimeout(() => { - console.log("Paso 3 completado") - callback() - }, 1000) -} - -step1(() => { - step2(() => { - step3(() => { - console.log("Todos los pasos completados") - }) - }) -}) - -// - Promesas - -const promise = new Promise((resolve, reject) => { - // IMPORTANTE: Inicialmente escribí setInterval, pero lo correcto es setTimeout - // setInterval se ejecutaría indefinidamente cada 4s, y el proceso nunca finalizaría - setTimeout(() => { - const ok = false - if (ok) { - resolve("Operación exitosa") - } else { - reject("Se ha producido un error") - } - }, 4000) -}) - -promise - .then(result => { - console.log(result) - }) - .catch(error => { - console.log(error) - }) - -// - Encadenamiento de promesas - -function step1Promise() { - return new Promise(resolve => { - setTimeout(() => { - console.log("Paso 1 con promesa completado") - resolve() - }, 1000) - }) -} - -function step2Promise() { - return new Promise(resolve => { - setTimeout(() => { - console.log("Paso 2 con promesa completado") - resolve() - }, 1000) - }) -} - -function step3Promise() { - return new Promise(resolve => { - setTimeout(() => { - console.log("Paso 3 con promesa completado") - resolve() - }, 1000) - }) -} - -step1Promise() - .then(step2Promise) - .then(step3Promise) - .then(() => { - console.log("Todos los pasos con promesa completados") - }) - -// - Async/Await - -function wait(ms) { - return new Promise(resolve => setTimeout(resolve, ms)) -} - -async function process() { - - console.log("Inicio del proceso") - - await wait(5000) - console.log("Proceso después de 5 segundos") - - await wait(1000) - console.log("Proceso después de 1 segundo") - - await wait(2000) - console.log("Proceso después de 2 segundos") - - console.log("Fin del proceso") -} - -process() \ No newline at end of file diff --git a/Intermediate/08-async-exercises.js b/Intermediate/08-async-exercises.js deleted file mode 100644 index 2dfecf6c..00000000 --- a/Intermediate/08-async-exercises.js +++ /dev/null @@ -1,50 +0,0 @@ -/* -Clase 45 - Asincronía -Vídeo: https://youtu.be/iJvLAZ8MJ2E?t=14558 -*/ - -// 1. Crea una función para saludar que reciba un nombre y un callback. -// El callback debe ejecutarse después de 2 segundos y mostrar en consola "Hola, [nombre]". - -// 2. Crea tres funciones task1(callback), task2(callback) y task3(callback). -// Cada función debe tardar 1 segundo en ejecutarse y luego llamar al callback. - -// 3. Crea una función para verificar un número que retorne una Promesa. -// Si el número es par, la promesa se resuelve con el mensaje "Número par". -// Si el número es impar, la promesa se rechaza con el mensaje "Número impar". - -// 4. Crea tres funciones que devuelvan promesas: -// firstTask(): tarda 1s y muestra "Primera tarea completada". -// secondTask(): tarda 2s y muestra "Segunda tarea completada". -// thirdTask(): tarda 1.5s y muestra "Tercera tarea completada". - -// 5. Transforma el ejercicio anterior de Promesas en una función async/await llamada executeTasks(). - -// 6. Crea una función getUser(id) que devuelva una promesa y simule una llamada a una API (que se demore 2s). -// Si el id es menor a 5, la promesa se resuelve con { id, nombre: "Usuario " + id }. -// Si el id es 5 o mayor, la promesa se rechaza con el mensaje "Usuario no encontrado". -// Usa async/await para llamar a getUser(id) y maneja los errores con try/catch. - -// 7. Intenta predecir el resultado de este código antes de ejecutarlo en la consola: -// console.log("Inicio") -// setTimeout(() => console.log("setTimeout ejecutado"), 0) -// Promise.resolve().then(() => console.log("Promesa resuelta")) -// console.log("Fin") - -// 8. Crea tres funciones que devuelvan promesas con tiempos de espera distintos. -// A continuación, usa Promise.all() para ejecutarlas todas al mismo tiempo y mostrar "Todas las promesas resueltas" cuando terminen. - -// 9. Crea una función waitSeconds(segundos) que use setTimeout dentro de una Promesa para esperar la cantidad de segundos indicada. -// A continuación, usa async/await para que se espere 3 segundos antes de mostrar "Tiempo finalizado" en consola. - -// 10. Crea una simulación de un cajero automático usando asincronía. -// - La función checkBalance() tarda 1s y devuelve un saldo de 500$. -// - La función withdrawMoney(amount) tarda 2s y retira dinero si hay suficiente saldo, o devuelve un error si no hay fondos. -// - Usa async/await para hacer que el usuario intente retirar 300$ y luego 300$ más. -// -// Posible salida esperada: -// Saldo disponible: 500$ -// Retirando 300$... -// Operación exitosa, saldo restante: 200$ -// Retirando 300$... -// Error: Fondos insuficientes \ No newline at end of file diff --git a/Intermediate/09-apis.js b/Intermediate/09-apis.js deleted file mode 100644 index fc172f08..00000000 --- a/Intermediate/09-apis.js +++ /dev/null @@ -1,171 +0,0 @@ -/* -Clases 46 a 59 - APIs -Vídeo: https://youtu.be/iJvLAZ8MJ2E?t=14777 -*/ - -// Manejo de APIs - -// - APIs REST (HTTP + URLs + JSON) - -// Métodos HTTP: -// - GET -// - POST -// - PUT -// - DELETE - -// Códigos de respuesta HTTP: -// - 200 OK -// - 201 -// - 400 -// - 404 -// - 500 - -// Consumir una API - -// https://jsonplaceholder.typicode.com - -// GET -fetch("https://jsonplaceholder.typicode.com/posts") - .then(response => { - // Transforma la respuesta a JSON - return response.json() - }) - .then(data => { - // Procesa los datos - console.log(data) - }) - .catch(error => { - // Captura errores - console.log("Error", error) - }) - -// Uso de Async/Await - -async function getPosts() { - try { - const response = await fetch("https://jsonplaceholder.typicode.com/posts") - const data = await response.json() - console.log(data) - } catch (error) { - console.log("Error", error) - } -} - -getPosts() - -// Solicitud POST - -async function createPost() { - try { - - const newPost = { - userId: 1, - title: "Este es el título de mi post", - body: "Este es el cuerpo de mi post" - } - - const response = await fetch("https://jsonplaceholder.typicode.com/posts", { - method: "POST", - headers: { - "Content-Type": "application/json" - }, - body: JSON.stringify(newPost) - }) - - const data = await response.json() - console.log(data) - } catch (error) { - console.log("Error", error) - } -} - -createPost() - -// Herramientas para realizar peticiones HTTP -// - https://postman.com -// - https://apidog.com -// - https://thunderclient.com - -// Manejo de errores - -fetch("https://jsonplaceholder.typicode.com/mouredev") - .then(response => { - if (!response.ok) { - throw Error(`Status HTTP: ${response.status}`) - } - return response.json() - }) - .catch(error => { - console.log("Error", error) - }) - -// Métodos HTTP adicionales -// - PATCH -// - OPTIONS - -async function partialPostUpdate() { - try { - const response = await fetch("https://jsonplaceholder.typicode.com/posts/10", { - method: "PATCH", - headers: { - "Content-Type": "application/json" - }, - body: JSON.stringify({ title: "Este es el nuevo título de mi post" }) - }) - - const data = await response.json() - console.log(data) - } catch (error) { - console.log("Error", error) - } -} - -partialPostUpdate() - -// Autenticación mediante API Key - -async function getWeather(city) { - - // https://openweathermap.org - const apiKey = "TU_API_KEY" - const url = `https://api.openweathermap.org/data/2.5/weather?q=${city}&appid=${apiKey}` - - try { - const response = await fetch(url) - const data = await response.json() - console.log(data) - } catch (error) { - console.log("Error", error) - } -} - -getWeather("Madrid") - -// Otros métodos de Autenticación y Autorización -// - Bearer Tokens -// - JWT - -// Versionado de APIs -// - https://api.example.com/v1/resources -// - https://api.example.com/v2/resources - -// Otras APIs - -async function getPokemon(pokemon) { - - // https://pokeapi.co - const url = `https://pokeapi.co/api/v2/pokemon/${pokemon}` - - try { - const response = await fetch(url) - const data = await response.json() - console.log(`Habilidades de ${data.name}`) - data.abilities.forEach(ability => { - console.log(ability.ability.name) - }) - } catch (error) { - console.log("Error", error) - } -} - -getPokemon("pikachu") \ No newline at end of file diff --git a/Intermediate/10-apis-exercises.js b/Intermediate/10-apis-exercises.js deleted file mode 100644 index 54962e23..00000000 --- a/Intermediate/10-apis-exercises.js +++ /dev/null @@ -1,24 +0,0 @@ -/* -Clase 60 - APIs -Vídeo: https://youtu.be/iJvLAZ8MJ2E?t=18710 -*/ - -// 1. Realiza una petición GET con fetch() a JSONPlaceholder y muestra en la consola la lista de publicaciones - -// 2. Modifica el ejercicio anterior para que verifique si la respuesta es correcta usando response.ok. Si no lo es, lanza y muestra un error - -// 3. Reescribe el ejercicio 1 usando la sintaxis async/await en lugar de promesas - -// 4. Realiza una petición POST a JSONPlaceholder para crear una nueva publicación. Envía un objeto con propiedades como title o body - -// 5. Utiliza el método PUT para actualizar completamente un recurso (por ejemplo, modificar una publicación) en JSONPlaceholder - -// 6. Realiza una petición PATCH para modificar únicamente uno o dos campos de un recurso existente - -// 7. Envía una solicitud DELETE a la API para borrar un recurso (por ejemplo, una publicación) y verifica la respuesta - -// 8. Crea una función que realice una solicitud GET (la que quieras) a OpenWeatherMap - -// 9. Utiliza la PokéAPI para obtener los datos de un Pokémon concreto, a continuación los detalles de la especie y, finalmente, la cadena evolutiva a partir de la especie - -// 10. Utiliza una herramienta como Postman o Thunder Client para probar diferentes endpoint de una API diff --git a/Intermediate/11-dom.js b/Intermediate/11-dom.js deleted file mode 100644 index 64d8fe49..00000000 --- a/Intermediate/11-dom.js +++ /dev/null @@ -1,123 +0,0 @@ -/* -Clases 61 a 68 - DOM -Vídeo: https://youtu.be/iJvLAZ8MJ2E?t=18822 -*/ - -// Manejo del DOM (Document Object Model) - -console.log(document) - -// - Selección de elementos - -// Métodos básicos (selector HTML) - -const myElementById = document.getElementById("id") - -const myElementsByClass = document.getElementsByClassName("class") - -const myElementsByTag = document.getElementsByTagName("tag") - -// Métodos más modernos (selector CSS) - -document.querySelector(".paragraph") -document.querySelectorAll(".paragraph") - -// - Manipulación de elementos - -const title = document.getElementById("title") -title.textContent = "Hola JavaScript" - -const container = document.querySelector(".container") -container.innerHTML = "

Esto es un nuevo párrafo

" - -// - Modificación de atributos - -// Obtención del atributo -const link = document.querySelector("a") -const url = link.getAttribute("href") - -// Establecimiento del atributo -link.setAttribute("href", "https://example.com") - -// Comprobación de atributo -const hasTarget = link.hasAttribute("target") - -// Eliminación de atributos -link.removeAttribute("target") - -// - Interacción con clases CSS - -const box = document.querySelector(".box") -box.classList.add("selected") -box.classList.remove("selected") -box.classList.toggle("selected") - -const button = document.querySelector("button") -button.style.backgroundColor = "blue" -button.style.color = "white" -button.style.padding = "10px" - -// - Creación y eliminación de elementos - -// Creación - -const newParagraph = document.createElement("p") -newParagraph.textContent = "Este es un nuevo párrafo creado desde JS" -newParagraph.style.padding = "8px" - -container.appendChild(newParagraph) - -const itemsList = document.querySelector("ul") -const newItem = document.createElement("li") -newItem.textContent = "Nuevo elemento" - -// Inserción en un lugar concreto - -const secondItem = itemsList.children[1] -itemsList.insertBefore(newItem, secondItem) - -itemsList.append(newItem) -itemsList.prepend(newItem) -secondItem.before(newItem) -secondItem.after(newItem) - -// Eliminación - -newParagraph.remove() - -// Eliminación tradicional - -const parent = newParagraph.parentElement -parent.removeChild(newParagraph) - -// - Elementos del DOM - -function showMsg() { - alert("Clic!") -} - -const sendButton = document.querySelector("#send") -sendButton.addEventListener("click", showMsg) - -sendButton.addEventListener("click", () => { - alert("Clic con una arrow function!") -}) - -// Eventos comunes - -document.addEventListener("DOMContentLoader", () => { - console.log("El DOM está completamente cargado") -}) - -sendButton.addEventListener("mouseenter", () => { - sendButton.style.backgroundColor = "green" -}) - -sendButton.addEventListener("mouseleave", () => { - sendButton.style.backgroundColor = "blue" -}) - -const form = document.querySelector("form") -form.addEventListener("submit", (event) => { - // Código -}) \ No newline at end of file diff --git a/Intermediate/12-dom-example.html b/Intermediate/12-dom-example.html deleted file mode 100644 index aab8d1f1..00000000 --- a/Intermediate/12-dom-example.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - HTML de ejemplo - - -

Mi título

- - - - - \ No newline at end of file diff --git a/Intermediate/13-dom-example.js b/Intermediate/13-dom-example.js deleted file mode 100644 index 946568d4..00000000 --- a/Intermediate/13-dom-example.js +++ /dev/null @@ -1,11 +0,0 @@ -/* -Clase 69 - DOM -Vídeo: https://youtu.be/iJvLAZ8MJ2E?t=21754 -*/ - -console.log(document) - -const myH1 = document.querySelector("h1") -console.log(myH1) - -myH1.textContent = "Mi nuevo título" \ No newline at end of file diff --git a/Intermediate/14-tasklist.html b/Intermediate/14-tasklist.html deleted file mode 100644 index 7f691bfd..00000000 --- a/Intermediate/14-tasklist.html +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - Lista de tareas - - -

Mis tareas

- - - - - - \ No newline at end of file diff --git a/Intermediate/15-tasklist.js b/Intermediate/15-tasklist.js deleted file mode 100644 index 0f126986..00000000 --- a/Intermediate/15-tasklist.js +++ /dev/null @@ -1,32 +0,0 @@ -/* -Clase 70 - DOM -Vídeo: https://youtu.be/iJvLAZ8MJ2E?t=22342 -*/ - -const text = document.getElementById("text") -const button = document.getElementById("button") -const list = document.getElementById("list") - -function addTask() { - - if (text.value === "") return - - const newElement = document.createElement("li") - newElement.textContent = text.value - - newElement.addEventListener("click", () => { - newElement.remove() - }) - - list.appendChild(newElement) - - text.value = "" -} - -button.addEventListener("click", addTask) - -text.addEventListener("keypress", (event) => { - if (event.key === "Enter") { - addTask() - } -}) \ No newline at end of file diff --git a/Intermediate/16-dom-exercises.js b/Intermediate/16-dom-exercises.js deleted file mode 100644 index 468093dc..00000000 --- a/Intermediate/16-dom-exercises.js +++ /dev/null @@ -1,24 +0,0 @@ -/* -Clase 71 - DOM -Vídeo: https://youtu.be/iJvLAZ8MJ2E?t=23010 -*/ - -// 1. Crea un elemento (por ejemplo, un

) y cambia su contenido a "¡Hola Mundo!"" al cargar la página - -// 2. Inserta una imagen con id="myImage" y cambia su atributo src a otra URL - -// 3. Crea un
sin clases y agrega la clase resaltado cuando se cargue la página - -// 4. Crea un párrafo con id="paragraph" y cambia su color de texto a azul - -// 5. Agrega un botón que, al hacer clic, cree un nuevo elemento
  • con el texto "Nuevo elemento y lo agregue a una lista