Loading repository data…
Loading repository data…
HugoRoca / repository
Repositorio para aprendizaje o recordatorio sobre node.js
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
V8 es el motor de código abierto de alto rendimiento de JavaScript y WebAssembly de Google, escrito en C ++. Se usa en Chrome y en Node.js, entre otros. Implementa ECMAScript y WebAssembly , y se ejecuta en Windows 7 o posterior, macOS 10.12+ y sistemas Linux que usan procesadores x64, IA-32, ARM o MIPS. V8 puede ejecutarse de forma independiente o puede integrarse en cualquier aplicación C ++.
Es cualquier cosa que produzca un valor primitivo...
'Hi' // Esto es una exprecsón
1 // Esto es una expresión
1.1 // Esto es una expresión
true // Esto es una expresión
function() {} // Esto es una expresión
Una variable está formada por un espacio en el sistema de almacenaje y nombre simbólico que esta asociado a dicho espacio.
Las variables persisten en la memoria RAM.
var catName; // versiones anteriores
let myAge = 25;
const PI = 3.1416
const greet = () => {};
greet()
// ==
// >
// <
// >=
// <=
// &&
// ||
let color = 'blue'
let isBlue = color === 'blue'
let edad = 18
let mayorEdad = edad >= 18
console.log(mayorEdad)
const age = 45
const calification = 80
const operation = 'add'
let n1 = 80
let n2 = 60
if (age >= 18 ) {
console.log('es meyor de edad')
} else {
console.log('es menor de edad')
}
if (calification >= 90) {
console.log('A')
} else if (calification >= 80 && calification < 90) {
console.log('B')
} else if (calification >= 70 && calification < 80) {
console.log('C')
} else {
console.log('Reprobado')
}
switch (operation) {
case 'add':
console.log(n1 + n2)
break
case 'subs':
console.log(n1 - n2)
break
default: 'operación no valida'
}
Se conoce tambien como json, estan representados por un key y una value.
Podemos acceder al objeto de manera:
const person = {
name: 'Hugo',
lastName: 'Roca',
isStudent: true,
getFullName () {
return `${this.name} ${this.lastName}`
}
}
console.log(person['name'])
console.log(person.name)
console.log(person.getFullName())
También podemos llevarlo a clase.
class Person {
constructor (name) {
this.name = name
}
getName () {
return this.name
}
}
const person = new Person('Hugo')
console.log(person.getName())
// ARRAYS
const fruits = ["apple", "melon", "mango"]
console.log(fruits[1]) // melon
console.log(fruits[1]) // apple
// -
const fruits = ["apple", "melon", "mango", () => { console.log("Hola") }]
console.log(fruits[3]()) // Hola
// SETS
const numbers = new Set()
numbers.add(5) // no almacena valores repetidos
numbers.add(6)
// MAPS
const students = new Map()
students.set("one", "Hugo")
console.log(students.get("one"))
const fruits = ["apple", "melon", "mango"]
console.log(fruits(0)) // bad
console.log(fruits(1)) // bad
console.log(fruits(2)) // bad
for (let i = 0; i <= fruits.length; i++) {
console.log(fruits[i])
}
for (const fruit of fruits) {
console.log(fruit)
}
const people = [{ name: "hugo1" }, { name: "hugo2" } ]
for (const person in people) {
console.log(people[person].name)
}
let iterator = 0
while (iterator < people.length) {
console.log(people[iterator])
iterator++
}
do {
console.log(people[iterator])
iterator++
} while (iterator < people.length)
function greet(name) {
console.log("hi" + name)
}
greet("hugo") // hi hugo
function calc(n1, n2) {
console.log(n1 + n2)
}
calc(1, 2) // 3
const greetMe = (name) => console.log(`Hola ${name}`)
greetMe("hugo") // Hola hugo
setTimeout(function, time, arg?)
setTimeout(() => {
console.log(`Hello word`)
}, 2000)
// Ejemplo
function calculate(n1, n2, operation) {
return operation(n1, n2)
}
function add(n1, n2) {
return n1 + n2
}
const result = calculate(1, 8, add)
console.log(result) // 9
Aquí veremos un ejemplo mas completo:
const booksDb = [
{
id: 1,
title: "web development with nodejs"
},
{
id: 2,
title: "the pragmatic programmer"
}
]
function getBookById(id, callback) {
const book = booksDb.find(book => book.id === id)
if (!book) {
// el primer parametro siempre es error
const error = new Error()
error.message = "book not found!"
return callback(error)
}
callback(null, book)
}
getBookById(2, (error, book) => {
if (error) return console.log(error.message)
return console.log(book)
})
Es una mala practica el cual se puede solucionar con funciones async/await. Aquí un ejemplo:
const booksDb = [
{
id: 1,
title: "web development with nodejs",
authorId: 1
},
{
id: 2,
title: "the pragmatic programmer",
authorId: 2
}
]
const authorsDb = [
{
id: 1,
name: "Robert C. Martin"
},
{
id: 2,
name: "Steve Forest"
}
]
function getBookById(id, callback) {
const book = booksDb.find(book => book.id === id)
if (!book) {
// el primer parametro siempre es error
const error = new Error()
error.message = "book not found!"
return callback(error)
}
callback(null, book)
}
function getAuthorById(id, callback) {
const author = authorsDb.find(author => author.id === id)
if (!author) {
// el primer parametro siempre es error
const error = new Error()
error.message = "author not found!"
return callback(error)
}
callback(null, author)
}
getBookById(2, (err, book) => {
if (err) return console.log(err.message)
getAuthorById(book.authorId, (err, author) => {
if (err) return console.log(err.message)
console.log(`This book ${book.title} was written by ${author.name}`)
})
return console.log(book)
})
Es un objeto que representa la terminación o el fracaso eventual de una operación asíncrona. Esencialmente una promesa es un objeto devuelto al cual se adjuntan funciones callback, en lugar de pasar callbacks a una función.
// tienen dos parametros resolver y reject
function executor(resolve, reject) {
resolve() // si todo funciona bien
reject() // si falla
}
const promise = new Promise(executor)
// tiene 3 métodos:
// .then() llega la data, siempore y cuando el metodo se haya invocado
// .catch() llega el error
// .finaly() siempre pasa por aqui
| Ventajas | Desventajas |
|---|---|
| - Fácilmente enlazable: se pueden enlazar fácilmente para manejar flujos asíncronos complejos sin tener que recurrir a mas anidaciones como se requieren en callbacks. | - Excepciones que desaparecen: Se debe declarar .catch() para manejar errores en lugar del tradicional try/catch. |
| - Poderoso: proporcionan una cantidad excepcional para componer operaciones asíncronas complejas. |
Aquí un ejemplo de promesas usando el ejemplo de callbaks anterior:
const booksDb = [] // datos en ejemplos anteriores
const authorsDb = [] // datos en ejemplos anteriores
function getBookById(id) {
return new Promise((resolve, reject) => {
const book = booksDb.find(book => book.id === id)
if (!book) {
const error = new Error()
error.message = "book not found!"
reject(error)
}
resolve(book)
})
}
function getAuthorById(id) {
return new Promise((resolve, reject) => {
const author = authorsDb.find(author => author.id === id)
if (!author) {
const error = new Error()
error.message = "author not found!"
reject(error)
}
resolve(author)
})
}
getBookById(1)
.then(book => {
return getAuthorById(book.id)
})
.then(author => {
console.log(author)
})
.catch(err => {
console.log(err.message)
})
Usa promesas en vez de callbacks para mantener el standard. Ten cuidado en caer en el promise hell por la excesiva anidación.
| Async | Await |
|---|---|
| Cuando se llama a una función async, esta devuelve un elemento Promise. Cuando la función async devuelve un valor, promise se resolverá con el valor devuelto. Si la función async genera una excepción o algún valor, promise se rechazará con el valor generado. | La expresión await provoca que la ejecución de una función async sea pausada hasta que la promise sea terminada o rechazada, y regresa a la ejecución de la función async después del termino. Al regreso de la ejecución, el valor de la expresión await es la regresada por una |