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..e73904f7 --- /dev/null +++ b/Basic/01-variables.js @@ -0,0 +1,29 @@ +/* +Clase 16 - Variables +Vídeo: https://youtu.be/1glVfFxj8a4?t=3049 +*/ + +// var ; NO SE DEBE UTILIZAR AHORA 250608 + +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/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/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/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/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/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/16-functions.js b/Basic/16-functions.js new file mode 100644 index 00000000..b7952a02 --- /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(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/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/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/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/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/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/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/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/Ejercicios/03-beginner-exercises.js b/Basic/Ejercicios/03-beginner-exercises.js new file mode 100644 index 00000000..2e7dd657 --- /dev/null +++ b/Basic/Ejercicios/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/Ejercicios/05-operators-exercises.js b/Basic/Ejercicios/05-operators-exercises.js new file mode 100644 index 00000000..a6265eac --- /dev/null +++ b/Basic/Ejercicios/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/Ejercicios/07-strings-exercises.js b/Basic/Ejercicios/07-strings-exercises.js new file mode 100644 index 00000000..c08f0166 --- /dev/null +++ b/Basic/Ejercicios/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/Ejercicios/09-conditionals-exercises.js b/Basic/Ejercicios/09-conditionals-exercises.js new file mode 100644 index 00000000..380e6542 --- /dev/null +++ b/Basic/Ejercicios/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/Ejercicios/13-structures-exercises.js b/Basic/Ejercicios/13-structures-exercises.js new file mode 100644 index 00000000..1b094502 --- /dev/null +++ b/Basic/Ejercicios/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/Ejercicios/15-loops-exercises.js b/Basic/Ejercicios/15-loops-exercises.js new file mode 100644 index 00000000..2a27cdd0 --- /dev/null +++ b/Basic/Ejercicios/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/Ejercicios/17-functions-exercises.js b/Basic/Ejercicios/17-functions-exercises.js new file mode 100644 index 00000000..fb7eb4e5 --- /dev/null +++ b/Basic/Ejercicios/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/Ejercicios/19-objects-exercises.js b/Basic/Ejercicios/19-objects-exercises.js new file mode 100644 index 00000000..5dbbd628 --- /dev/null +++ b/Basic/Ejercicios/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/Ejercicios/21-destructuring-spreading-exercises.js b/Basic/Ejercicios/21-destructuring-spreading-exercises.js new file mode 100644 index 00000000..feadceb3 --- /dev/null +++ b/Basic/Ejercicios/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/Ejercicios/23-classes-exercises.js b/Basic/Ejercicios/23-classes-exercises.js new file mode 100644 index 00000000..e26e0232 --- /dev/null +++ b/Basic/Ejercicios/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/Ejercicios/25-error-handling-exercises.js b/Basic/Ejercicios/25-error-handling-exercises.js new file mode 100644 index 00000000..5e227586 --- /dev/null +++ b/Basic/Ejercicios/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/Ejercicios/27-console-methods-exercises.js b/Basic/Ejercicios/27-console-methods-exercises.js new file mode 100644 index 00000000..9c38919b --- /dev/null +++ b/Basic/Ejercicios/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/Ejercicios/30-import-external-modules.cjs b/Basic/Ejercicios/30-import-external-modules.cjs new file mode 100644 index 00000000..5718b5d4 --- /dev/null +++ b/Basic/Ejercicios/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/Ejercicios/exercises.pdf b/Basic/Ejercicios/exercises.pdf new file mode 100644 index 00000000..f8021bfe Binary files /dev/null and b/Basic/Ejercicios/exercises.pdf differ 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 diff --git a/Basic/test.js b/Basic/test.js new file mode 100644 index 00000000..585463bf --- /dev/null +++ b/Basic/test.js @@ -0,0 +1,3 @@ +let b + +console.log(b) \ No newline at end of file