Strumenti Javascript in azione
Scoprite alcuni strumenti di recupero JavaScript per migliorare la vostra programmazione. Scoprite di più su ESLint, Prettier e Husky!
Leggete il nostro articolo per scoprire la potenza della programmazione funzionale in JavaScript. La programmazione funzionale è classificata come un paradigma dichiarativo in cui la descrizione del programma è separata dai calcoli.
"In termini semplici, la programmazione funzionale è una sviluppo software stile che pone l'accento sull'uso delle funzioni".
Estratti dal libro: Luis Atencio "Programmazione funzionale in JavaScript. Come migliorare il vostro JavaScript programmi che utilizzano tecniche funzionali".
Programmazione funzionale è classificato come un dichiarativo in cui la descrizione del programma è separata dai calcoli. L'accento è posto sull'uso di espressioni per descrivere la logica del programma. È l'opposto di imperativo programmazione, dove il codice viene eseguito passo dopo passo e indica al computer in dettaglio come svolgere il lavoro.
Consideriamo un caso in cui abbiamo una matrice di numeri interi e dobbiamo elevare ciascuno di essi alla seconda potenza e poi selezionare solo i valori che non sono pari.
const numeri = [1, 2, 3, 4, 5, 6, 7, 8, 9];
const risultati = []
for(let i = 0; i < numeri.lunghezza; i++) {
const secondPower = Math.pow(numeri[i], 2)
if(secondPower & 1) { // o % 2 ma le operazioni sui bit sono più veloci
results.push(secondPower);
}
}
console.log(risultati) // [1, 9, 25, 49, 81]
Per quanto riguarda il imperativo L'attenzione ai dettagli dell'implementazione è chiaramente visibile. Nel ciclo, è possibile vedere l'indice dell'array basato sulla necessità di controllare il numero di elementi. A causa dell'elevato numero di dettagli nel codice, è più difficile concentrarsi su ciò che sta facendo. Concentriamoci ora sull'elemento dichiarativo soluzione.
const risesToSecondPower = (num) => Math.pow(num, 2)
const isOdd = (num) => num & 1;
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
const risultati = numeri
.map(risesToSecondPower)
.filter(isOdd);
console.log(risultati) // [1, 9, 25, 49, 81]
In questa soluzione, l'implementazione è stata separata dall'invocazione, portando la logica in funzioni separate. Grazie a questa soluzione, possiamo concentrarci solo sui nomi delle funzioni che descrivono ciò che accade al loro interno. Inoltre, il livello di astrazione è stato innalzato e la logica può essere riutilizzata. Ora concentriamoci sulla chiamata. Non ci sono dettagli, ma solo una descrizione che ci dice cosa fa questo codice, passo dopo passo:
mappa(saleAlSecondoPotere)
- prende ogni elemento di una matrice e lo eleva alla seconda potenza,filtro(isOdd)
- e selezionare gli elementi dispari.Programmazione funzionale ha molti vantaggi. Quando si tratta di JavaScriptL'uso delle funzioni è naturale perché si tratta di un linguaggio funzionale. Anche le classi in questo linguaggio sono "zucchero sintattico" e sono sottoposte a funzioni.
Per quanto riguarda la leggibilità, nell'approccio imperativo il codice diventa di solito un elenco di nomi di funzioni che possono essere letti in sequenza senza approfondire la loro logica. Di conseguenza, non ci si concentra sui dettagli dell'implementazione.
Un altro vantaggio è quello di attenersi alla convenzione degli oggetti immutabili. Grazie a questo approccio, il codice diventa più sicuro, perché i riferimenti in JavaScript sono molto forti ed è facile modificare l'oggetto indesiderato.
Nella programmazione funzionale, il codice viene suddiviso in piccole funzioni che possono essere facilmente considerate come codice astratto riutilizzabile.
Una delle considerazioni importanti nella programmazione funzionale sono le funzioni pure. Per creare una funzione di questo tipo, è necessario ricordare alcune regole:
// Funzione Inpure
let counter = 5
...
const multipleCounter = (moltiplicatore) => {
contatore = contatore * moltiplicatore
}
multiplyCounter(2) // -> ? il risultato dipende dal valore iniziale
// Funzione pura
const multiplyBy = (moltiplicatore) => (valore) => valore * moltiplicatore
const multipleByTwo = multiplyBy(2)
const counter = multiplyByTwo(5) // -> 10
La prima funzione è imprevedibile perché dipende da un parametro esterno che può cambiare. La seconda funzione è trasparente, dipende solo dai parametri di ingresso, non li modifica e non utilizza variabili fuori dall'intervallo. È trasparente perché dipende dai parametri, non li modifica, non utilizza variabili fuori dall'intervallo e restituisce un nuovo valore.