diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 00000000..d31d9413 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,25 @@ +{ + "env": { + "browser": true, + "node": true, + "es2021": true + }, + "extends": "eslint:recommended", + "parserOptions": { + "ecmaVersion": "latest", + "sourceType": "module" + }, + "rules": { + "quotes": "off", + "semi": "off", + "comma-dangle": "off", + "no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "^_" + } + ], + "no-var": "warn", + "prefer-const": "warn" + } +} 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/.prettierrc b/.prettierrc new file mode 100644 index 00000000..6a73816b --- /dev/null +++ b/.prettierrc @@ -0,0 +1,13 @@ +{ + "semi": false, + "singleQuote": false, + + "trailingComma": "none", + "arrowParens": "avoid", + "printWidth": 80, + "tabWidth": 2, + "useTabs": false, + "bracketSpacing": true, + "quoteProps": "preserve", + "endOfLine": "lf" +} 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 index 23a48e6e..f9857d56 100644 --- a/Basic/00-helloworld.js +++ b/Basic/00-helloworld.js @@ -1,36 +1,9 @@ -/* -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("Hola Mundo") 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 +console.log(5 / 5) +console.log(15 / 3) +console.log(15 % 3) +console.log(2 ** 2) +console.log(2 ** 2) 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/01variables.js b/Basic/01variables.js new file mode 100644 index 00000000..45b671fa --- /dev/null +++ b/Basic/01variables.js @@ -0,0 +1,23 @@ +// var +/* No se recomienda usarla ya que da errores en el código , como por ejemplo ser llamado antes de ser +definido y dar como resultado undefined, lo que indica que la variable, aunque no definida, existe antes de ser declarada y eso es un error. A partir de EICMA 6 se convino que la palabra reservada let sería la sustituta, ya que esta no crea los problemas de código, y es asignada exclusivamente a los bloques de código. un ejemplo de esto es el siguiente: La variable siendo asignada antes de ser definida da undefined*/ +console.log(helloWorld) +var helloWorld = "Hola JavaScript" +console.log(helloWorld) + +// let +/* Esta es la palabra reservada que viene a sustituir en determinada forma a la palabra reservada var, aunque esta se sigue utilizando en muy específicas ocasiones. Para let no existe el error de estar existente antes de ser declarada como se ve en el siguiente ejemplo, en el cual en la primera impresión en la consola,no se puede acceder a la variable antes de ser inicializada, lo cual es correcto.*/ +// console.log(helloworlds) +let helloworlds = "Hola JavaScript" +console.log(helloworlds) + +// const +/*La variable const de fine a las constantes, las cuales al adquirir un primer valor, no pueden cambiar este, excepto en los arrays, en los cuales al pasar el valor como referencia, se puede cambiar el contenido. */ +const constante = "Este valor no cambia" +console.log(constante) +// constante='Intento de cambio' Da error. +console.log(constante) +console.log('nuevo') +console.log("nuevo") +console.log("nuevo"); + diff --git a/Basic/02-datatypes.js b/Basic/02-datatypes.js index ab37f6ee..141e7574 100644 --- a/Basic/02-datatypes.js +++ b/Basic/02-datatypes.js @@ -1,55 +1,38 @@ -/* -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 - +/*Los Datos primitivos son aquellos en los que se fundamenta nuestra interacción con el lenguaje. Son datos básicos e inmutables. Representan un sólo valor. Es lo que significa dato primitivo. No son objetos.Tampoco tienen funciones o métodos. +Los tipos de datos primitivos son siete: +*Cadena de Texto.(String) +*Números + */ + +// Texto(string) +let texto = 'Cadena de texto' +// Número (number) +let numero = 5 //entero +let decimal = 1.73 //decimal // Booleanos (boolean) -let isTeacher = true -let isStudent = false - +let isTeacher = 'true' +let isStudent = 'false' // Undefined -let undefinedValue -console.log(undefinedValue) - +let indefinedValue = undefined +console.log(indefinedValue) //undefined: La variable no está aún con un valor definido. +let otroIndefinedValue +console.log(otroIndefinedValue) //undefined // Null -let nullValue = null - +let variableNula = null // indica ausencia de valor. // 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) - +let mySymbol = Symbol('esteSimbolo') +console.log(mySymbol) +// Bigint +let numeroGrande = BigInt(546546446544455445454544544546) +let numeroGrande2 = 61646444456456446446464554848684488n //Otra forma de representarlo es poniendo al final una n. +console.log(numeroGrande) +console.log(numeroGrande2) +// Para mostrar los tipos de datos +console.log(typeof numeroGrande) console.log(typeof mySymbol) - -console.log(typeof myBigInt) -console.log(typeof myBigInt2) \ No newline at end of file +console.log(typeof variableNula) +console.log(typeof indefinedValue) +console.log('nuevo') +console.log('nuevo') +console.log('nuevo') +console.log('nuevo') 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