From 21b84dd94e7fe0b741dbce5b9e22253e5515f388 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n?= Date: Sun, 8 Jun 2025 14:08:16 +0200 Subject: [PATCH 1/6] agregamos las clases del curso --- 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 + 33 files changed, 1841 insertions(+) create mode 100644 Basic/00-helloworld.js create mode 100644 Basic/01-variables.js create mode 100644 Basic/02-datatypes.js create mode 100644 Basic/03-beginner-exercises.js create mode 100644 Basic/04-operators.js create mode 100644 Basic/05-operators-exercises.js create mode 100644 Basic/06-strings.js create mode 100644 Basic/07-strings-exercises.js create mode 100644 Basic/08-conditionals.js create mode 100644 Basic/09-conditionals-exercises.js create mode 100644 Basic/10-array.js create mode 100644 Basic/11-set.js create mode 100644 Basic/12-map.js create mode 100644 Basic/13-structures-exercises.js create mode 100644 Basic/14-loops.js create mode 100644 Basic/15-loops-exercises.js create mode 100644 Basic/16-functions.js create mode 100644 Basic/17-functions-exercises.js create mode 100644 Basic/18-objects.js create mode 100644 Basic/19-objects-exercises.js create mode 100644 Basic/20-destructuring-spreading.js create mode 100644 Basic/21-destructuring-spreading-exercises.js create mode 100644 Basic/22-classes.js create mode 100644 Basic/23-classes-exercises.js create mode 100644 Basic/24-error-handling.js create mode 100644 Basic/25-error-handling-exercises.js create mode 100644 Basic/26-console-methods.js create mode 100644 Basic/27-console-methods-exercises.js create mode 100644 Basic/28-export-modules.js create mode 100644 Basic/29-import-modules.js create mode 100644 Basic/30-import-external-modules.cjs create mode 100644 Basic/31-modules-exercises.js create mode 100644 Basic/package.json diff --git a/Basic/00-helloworld.js b/Basic/00-helloworld.js new file mode 100644 index 00000000..23a48e6e --- /dev/null +++ b/Basic/00-helloworld.js @@ -0,0 +1,36 @@ +/* +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 new file mode 100644 index 00000000..e1f7b6dd --- /dev/null +++ b/Basic/01-variables.js @@ -0,0 +1,29 @@ +/* +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 new file mode 100644 index 00000000..ab37f6ee --- /dev/null +++ b/Basic/02-datatypes.js @@ -0,0 +1,55 @@ +/* +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 new file mode 100644 index 00000000..2e7dd657 --- /dev/null +++ b/Basic/03-beginner-exercises.js @@ -0,0 +1,24 @@ +/* +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 new file mode 100644 index 00000000..cac42886 --- /dev/null +++ b/Basic/04-operators.js @@ -0,0 +1,109 @@ +/* +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 new file mode 100644 index 00000000..a6265eac --- /dev/null +++ b/Basic/05-operators-exercises.js @@ -0,0 +1,25 @@ +/* +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 new file mode 100644 index 00000000..8c257b7b --- /dev/null +++ b/Basic/06-strings.js @@ -0,0 +1,48 @@ +/* +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 new file mode 100644 index 00000000..c08f0166 --- /dev/null +++ b/Basic/07-strings-exercises.js @@ -0,0 +1,24 @@ +/* +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 new file mode 100644 index 00000000..22bfcfa2 --- /dev/null +++ b/Basic/08-conditionals.js @@ -0,0 +1,70 @@ +/* +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 new file mode 100644 index 00000000..380e6542 --- /dev/null +++ b/Basic/09-conditionals-exercises.js @@ -0,0 +1,29 @@ +/* +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 new file mode 100644 index 00000000..b9028147 --- /dev/null +++ b/Basic/10-array.js @@ -0,0 +1,104 @@ +/* +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 new file mode 100644 index 00000000..aab6cf3f --- /dev/null +++ b/Basic/11-set.js @@ -0,0 +1,61 @@ +/* +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 new file mode 100644 index 00000000..b91f3d6c --- /dev/null +++ b/Basic/12-map.js @@ -0,0 +1,66 @@ +/* +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 new file mode 100644 index 00000000..1b094502 --- /dev/null +++ b/Basic/13-structures-exercises.js @@ -0,0 +1,24 @@ +/* +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 new file mode 100644 index 00000000..9c404287 --- /dev/null +++ b/Basic/14-loops.js @@ -0,0 +1,79 @@ +/* +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 new file mode 100644 index 00000000..2a27cdd0 --- /dev/null +++ b/Basic/15-loops-exercises.js @@ -0,0 +1,26 @@ +/* +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 new file mode 100644 index 00000000..e5d3dec5 --- /dev/null +++ b/Basic/16-functions.js @@ -0,0 +1,117 @@ +/* +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(b = 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 + +myArray = [1, 2, 3, 4] + +mySet = new Set(["Brais", "Moure", "mouredev", 37, true, "braismoure@mouredev.com"]) + +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 new file mode 100644 index 00000000..fb7eb4e5 --- /dev/null +++ b/Basic/17-functions-exercises.js @@ -0,0 +1,26 @@ +/* +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 new file mode 100644 index 00000000..4e71a6b2 --- /dev/null +++ b/Basic/18-objects.js @@ -0,0 +1,119 @@ +/* +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 new file mode 100644 index 00000000..5dbbd628 --- /dev/null +++ b/Basic/19-objects-exercises.js @@ -0,0 +1,24 @@ +/* +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 new file mode 100644 index 00000000..385cb24d --- /dev/null +++ b/Basic/20-destructuring-spreading.js @@ -0,0 +1,121 @@ +/* +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 new file mode 100644 index 00000000..feadceb3 --- /dev/null +++ b/Basic/21-destructuring-spreading-exercises.js @@ -0,0 +1,25 @@ +/* +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 new file mode 100644 index 00000000..b95ddc26 --- /dev/null +++ b/Basic/22-classes.js @@ -0,0 +1,193 @@ +/* +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 new file mode 100644 index 00000000..e26e0232 --- /dev/null +++ b/Basic/23-classes-exercises.js @@ -0,0 +1,24 @@ +/* +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 new file mode 100644 index 00000000..43cb9d9d --- /dev/null +++ b/Basic/24-error-handling.js @@ -0,0 +1,111 @@ +/* +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 new file mode 100644 index 00000000..5e227586 --- /dev/null +++ b/Basic/25-error-handling-exercises.js @@ -0,0 +1,24 @@ +/* +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 new file mode 100644 index 00000000..e5f9177d --- /dev/null +++ b/Basic/26-console-methods.js @@ -0,0 +1,97 @@ +/* +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 new file mode 100644 index 00000000..9c38919b --- /dev/null +++ b/Basic/27-console-methods-exercises.js @@ -0,0 +1,24 @@ +/* +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 new file mode 100644 index 00000000..42f92679 --- /dev/null +++ b/Basic/28-export-modules.js @@ -0,0 +1,50 @@ +/* +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 new file mode 100644 index 00000000..e702dc84 --- /dev/null +++ b/Basic/29-import-modules.js @@ -0,0 +1,37 @@ +/* +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 new file mode 100644 index 00000000..5718b5d4 --- /dev/null +++ b/Basic/30-import-external-modules.cjs @@ -0,0 +1,13 @@ +/* +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 new file mode 100644 index 00000000..a09c62b9 --- /dev/null +++ b/Basic/31-modules-exercises.js @@ -0,0 +1,24 @@ +/* +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 new file mode 100644 index 00000000..96ae6e57 --- /dev/null +++ b/Basic/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} \ No newline at end of file From cfea91f74ce8c19ec434d04f7399431835cb38b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n?= Date: Sun, 8 Jun 2025 14:37:42 +0200 Subject: [PATCH 2/6] =?UTF-8?q?modificamos=20ubicaci=C3=B3n=20ejercicios?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Basic/01-variables.js | 2 +- Basic/{ => Ejercicios}/03-beginner-exercises.js | 0 .../{ => Ejercicios}/05-operators-exercises.js | 0 Basic/{ => Ejercicios}/07-strings-exercises.js | 0 .../09-conditionals-exercises.js | 0 .../{ => Ejercicios}/13-structures-exercises.js | 0 Basic/{ => Ejercicios}/15-loops-exercises.js | 0 .../{ => Ejercicios}/17-functions-exercises.js | 0 Basic/{ => Ejercicios}/19-objects-exercises.js | 0 .../21-destructuring-spreading-exercises.js | 0 Basic/{ => Ejercicios}/23-classes-exercises.js | 0 .../25-error-handling-exercises.js | 0 .../27-console-methods-exercises.js | 0 .../30-import-external-modules.cjs | 0 Basic/Ejercicios/exercises.pdf | Bin 0 -> 89473 bytes 15 files changed, 1 insertion(+), 1 deletion(-) rename Basic/{ => Ejercicios}/03-beginner-exercises.js (100%) rename Basic/{ => Ejercicios}/05-operators-exercises.js (100%) rename Basic/{ => Ejercicios}/07-strings-exercises.js (100%) rename Basic/{ => Ejercicios}/09-conditionals-exercises.js (100%) rename Basic/{ => Ejercicios}/13-structures-exercises.js (100%) rename Basic/{ => Ejercicios}/15-loops-exercises.js (100%) rename Basic/{ => Ejercicios}/17-functions-exercises.js (100%) rename Basic/{ => Ejercicios}/19-objects-exercises.js (100%) rename Basic/{ => Ejercicios}/21-destructuring-spreading-exercises.js (100%) rename Basic/{ => Ejercicios}/23-classes-exercises.js (100%) rename Basic/{ => Ejercicios}/25-error-handling-exercises.js (100%) rename Basic/{ => Ejercicios}/27-console-methods-exercises.js (100%) rename Basic/{ => Ejercicios}/30-import-external-modules.cjs (100%) create mode 100644 Basic/Ejercicios/exercises.pdf diff --git a/Basic/01-variables.js b/Basic/01-variables.js index e1f7b6dd..e73904f7 100644 --- a/Basic/01-variables.js +++ b/Basic/01-variables.js @@ -3,7 +3,7 @@ Clase 16 - Variables Vídeo: https://youtu.be/1glVfFxj8a4?t=3049 */ -// var +// var ; NO SE DEBE UTILIZAR AHORA 250608 var helloWorld = "¡Hola, JavaScript!" console.log(helloWorld) diff --git a/Basic/03-beginner-exercises.js b/Basic/Ejercicios/03-beginner-exercises.js similarity index 100% rename from Basic/03-beginner-exercises.js rename to Basic/Ejercicios/03-beginner-exercises.js diff --git a/Basic/05-operators-exercises.js b/Basic/Ejercicios/05-operators-exercises.js similarity index 100% rename from Basic/05-operators-exercises.js rename to Basic/Ejercicios/05-operators-exercises.js diff --git a/Basic/07-strings-exercises.js b/Basic/Ejercicios/07-strings-exercises.js similarity index 100% rename from Basic/07-strings-exercises.js rename to Basic/Ejercicios/07-strings-exercises.js diff --git a/Basic/09-conditionals-exercises.js b/Basic/Ejercicios/09-conditionals-exercises.js similarity index 100% rename from Basic/09-conditionals-exercises.js rename to Basic/Ejercicios/09-conditionals-exercises.js diff --git a/Basic/13-structures-exercises.js b/Basic/Ejercicios/13-structures-exercises.js similarity index 100% rename from Basic/13-structures-exercises.js rename to Basic/Ejercicios/13-structures-exercises.js diff --git a/Basic/15-loops-exercises.js b/Basic/Ejercicios/15-loops-exercises.js similarity index 100% rename from Basic/15-loops-exercises.js rename to Basic/Ejercicios/15-loops-exercises.js diff --git a/Basic/17-functions-exercises.js b/Basic/Ejercicios/17-functions-exercises.js similarity index 100% rename from Basic/17-functions-exercises.js rename to Basic/Ejercicios/17-functions-exercises.js diff --git a/Basic/19-objects-exercises.js b/Basic/Ejercicios/19-objects-exercises.js similarity index 100% rename from Basic/19-objects-exercises.js rename to Basic/Ejercicios/19-objects-exercises.js diff --git a/Basic/21-destructuring-spreading-exercises.js b/Basic/Ejercicios/21-destructuring-spreading-exercises.js similarity index 100% rename from Basic/21-destructuring-spreading-exercises.js rename to Basic/Ejercicios/21-destructuring-spreading-exercises.js diff --git a/Basic/23-classes-exercises.js b/Basic/Ejercicios/23-classes-exercises.js similarity index 100% rename from Basic/23-classes-exercises.js rename to Basic/Ejercicios/23-classes-exercises.js diff --git a/Basic/25-error-handling-exercises.js b/Basic/Ejercicios/25-error-handling-exercises.js similarity index 100% rename from Basic/25-error-handling-exercises.js rename to Basic/Ejercicios/25-error-handling-exercises.js diff --git a/Basic/27-console-methods-exercises.js b/Basic/Ejercicios/27-console-methods-exercises.js similarity index 100% rename from Basic/27-console-methods-exercises.js rename to Basic/Ejercicios/27-console-methods-exercises.js diff --git a/Basic/30-import-external-modules.cjs b/Basic/Ejercicios/30-import-external-modules.cjs similarity index 100% rename from Basic/30-import-external-modules.cjs rename to Basic/Ejercicios/30-import-external-modules.cjs diff --git a/Basic/Ejercicios/exercises.pdf b/Basic/Ejercicios/exercises.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f8021bfe25c02f36a900ef4d95e2cc828397ecb2 GIT binary patch literal 89473 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 literal 0 HcmV?d00001 From 002f330b4bd4852e8bf478bea06c73adaf299e87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n?= Date: Sun, 8 Jun 2025 14:37:46 +0200 Subject: [PATCH 3/6] Create test.js --- Basic/test.js | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 Basic/test.js diff --git a/Basic/test.js b/Basic/test.js new file mode 100644 index 00000000..a5b8250c --- /dev/null +++ b/Basic/test.js @@ -0,0 +1,2 @@ +let test +console.log(test) \ No newline at end of file From 85b215e492138a02573a0dc0da35a15470f5bffd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n?= Date: Sat, 21 Jun 2025 16:00:50 +0200 Subject: [PATCH 4/6] Update 16-functions.js --- Basic/16-functions.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Basic/16-functions.js b/Basic/16-functions.js index e5d3dec5..b7952a02 100644 --- a/Basic/16-functions.js +++ b/Basic/16-functions.js @@ -62,7 +62,7 @@ function defaultSum(a = 0, b = 0) { defaultSum() defaultSum(5) defaultSum(5, 10) -defaultSum(b = 5) +defaultSum(undefined, 5) // Retorno de valores @@ -96,11 +96,11 @@ applyFunc(myFunc4, "función de orden superior") // forEach -myArray = [1, 2, 3, 4] +const myArray = [1, 2, 3, 4] -mySet = new Set(["Brais", "Moure", "mouredev", 37, true, "braismoure@mouredev.com"]) +const mySet = new Set(["Brais", "Moure", "mouredev", 37, true, "braismoure@mouredev.com"]) -myMap = new Map([ +const myMap = new Map([ ["name", "Brais"], ["email", "braismoure@mouredev.com"], ["age", 37] From 8906b2cdab8d0f2fe26abe69f525f3667d9e17c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n?= Date: Sat, 21 Jun 2025 16:00:52 +0200 Subject: [PATCH 5/6] Update test.js --- Basic/test.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Basic/test.js b/Basic/test.js index a5b8250c..6441bd47 100644 --- a/Basic/test.js +++ b/Basic/test.js @@ -1,2 +1,8 @@ -let test -console.log(test) \ No newline at end of file + +function defaultSum(a = 0, b = 0) { + console.log(a + b) +} + +let b = 5 +console.log(b) +defaultSum(2,b) \ No newline at end of file From a0d83e9a63b346dfe0e1cf11cfd46b07cfc3b73b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n?= Date: Sun, 29 Jun 2025 13:25:06 +0200 Subject: [PATCH 6/6] Update test.js --- Basic/test.js | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/Basic/test.js b/Basic/test.js index 6441bd47..585463bf 100644 --- a/Basic/test.js +++ b/Basic/test.js @@ -1,8 +1,3 @@ +let b -function defaultSum(a = 0, b = 0) { - console.log(a + b) -} - -let b = 5 -console.log(b) -defaultSum(2,b) \ No newline at end of file +console.log(b) \ No newline at end of file