Programmation fonctionnelle
Paradigme programmation
var prenoms = ["Martin", "Marc", "Maxime"]
var eleves = []
for (var i = 0; i < prenoms.length; i++) {
eleves.push(prenoms[i].toUpperCase())
}
eleves.sort()
console.log(eleves) // ["MARC", "MARTIN", "MAXIME"]
var eleves = Immutable.List(["Martin", "Marc", "Maxime"])
.map(prenom => prenom.toUpperCase())
.sort()
.toArray()
console.log('first', eleves); // ["MARC", "MARTIN", "MAXIME"]
Immutabilité
var eleves = ['Jean']
eleves.push('Marc') // Mutation
eleves // ["Jean", "Marc"]
var eleves = ['Jean']
var nouvelle_classe = [...eleves, 'Marc']
nouvelle_classe
Pas de surprise !
today = moment()
/*
*
* Plein de code
*
*/
future = today.add('years', 1)
// Bugs !
today === future // true ??
today = moment()
/*
*
* Plein de code
*
*/
future = today.clone().add('years', 1)
today === future // false
Mais peut être lourd :(
class1 = [1, ..., 1 000 000]
class2 = [...class1, 'Marc']
// 2 tableaux en mémoires :(
Fonctions pures
function count_eleves () {
return "Il y a " + eleves.length + " eleves !"
}
var eleves = ['Jean', 'Marc']
count_eleves()
function count_eleves (eleves) {
return "Il y a " + eleves.length + " eleves !"
}
var eleves = ['Jean', 'Marc']
count_eleves(eleves)
Fonctions d'ordre supérieur
function count_eleves (eleves, compteur) {
return "Il y a " + compteur(eleves) + " eleves !"
}
var eleves = ['Jean', 'Marc']
count_eleves(eleves, items => items.length + 1)
- Fonction qui prend en argument une fonction
- Fonction qui retourne une fonction
var numbers = [1, 2, 3, 4]
var multiplyBy = function (n) {
return function (item) {
return item * n
}
}
numbers.map(multiplyBy(10)) // [10, 20, 30, 40]
Map, Filter et Reduce
var numbers = [1, 2, 3, 4]
numbers.map(item => item * 10) // [10, 20, 30, 40]
numbers.filter(item => item % 2 === 0) // [2, 4]
numbers.reduce((accumulateur, item) => accumulateur + item) // 10
sont sur un bateau...
Programmation fonctionnelle
By Jonathan Boyer
Programmation fonctionnelle
- 1,528