Tenemos la sintaxis tradicional:
function miFuncion (parameter1, parameter2, parameterN) {
// instrucción 1
// instrucción 2
// instrucción n
return valor // Si no hay retorno la función pasa a llamarse "Procedimiento"
}
Una function expression es una función que se asigna a una variable. Por ejemplo:
// esto es una function expression
const sum = function (a, b) {
return a + b
}
// esto es una declaración de función
function sum(a, b) {
return a + b
}
¡Fíjate que la function no tiene nombre en la function expression! Cuando una función no tiene nombre se le llama función anónima. Aunque en este caso, la función está asignada a una variable que sí tiene nombre y por eso podremos utilizarla más adelante.
const miFuncion = (parameter1, parameter2, parameterN) => { // No olvides el operador flecha =>
// instrucción 1
// instrucción 2
// instrucción n
return valor // Si no hay retorno la función pasa a llamarse "Procedimiento"
}
let nombre = prompt('Dame tu nombre','Xurxo') // El segundo argumento es opcional
let nombre = prompt('Dame tu nombre','Xurxo') // El segundo argumento es opcional
alert('Mi nombre es ' + nombre) // Cuando sumamos / unimos strings el operador + es de concatenación
La función Math.random() devuelve un número de coma flotante pseudo-aleatorio, comprendido en el rango de 0 a menor que 1 (es decir, incluido el 0 pero no el 1), con una distribución aproximadamente uniforme en este rango.
Devuelve el máximo entero menor o igual a un número.
La función Math.trunc() devuelve la parte entera de un numero removiendo cualquier dígito decimal (dígitos situados después de la coma).
Una Función Orden de Orden Mayor HOF es un conjunto de instrucciones para realizar una tarea, por lo tanto es una función normal. Pero lo que diferencia es que puede llevar como parámetro la declaración de otra función (callback) o el retorno de la misma. Esto es debido a que en JavaScript decimos que las funciones son first-class citizens o ciudadanas de primera clase, esto significa que pueden ser tratadas como cualquier otro valor primitivo.
Un ejemplo serían las funciones addEventListener (HOF) y foo (callback):
function foo (event) {
// Conjunto de instrucciones
}
document.querySelector('#btn').addEventListener('click', foo)
Podemos reproducir el anterior ejemplo con un callback anónimo, es decir, una función no denominada:
document.querySelector('#btn').addEventListener('click', function (event) {
// Conjunto de instrucciones
})
Un ejemplo más elaborado de HOF:
// HOF
function higherOrderFunction (value, callback) {
return callback(value)
}
// Función normal
function divisoresComunes (numeros) {
const divisoresTmp = []
for (let i = 1; i <= numeros; i++) {
if (numeros % i === 0) {
divisoresTmp.push(i)
}
}
return divisoresTmp
}
// Función normal
function esNumeroPrimo (num) {
if (num === 0 || num === 1) {
return false
} else {
for (let i = 2; i < num; i++) {
if (num % i === 0) {
return false
}
}
}
return true
}
// divisoresComunes y esNumeroPrimo ahora son callbacks
const divisores = higherOrderFunction(7, divisoresComunes)
const esPrimo = higherOrderFunction(7, esNumeroPrimo)
console.log(divisores) // << [ 1, 7 ]
console.log(esPrimo) // << true
Cuando una función se llama a sí misma se denomina recursividad. A no ser que se tenga claro lo que se hace habrá que tratar de evitarla.
// Declaración de la función
function divisoresComunes (i, numberValue, divisoresTmp) {
if (numberValue % i === 0) {
divisoresTmp.push(i)
}
if(i <= numberValue) {
divisoresComunes(++i, numberValue, divisoresTmp) // Aquí la recursividad
}
return divisoresTmp
}
// Lanzamos la función
const divisores = divisoresComunes(1, 232, [])