On a des langages multi-paradigmes qui font du fonctionnel. En quoi ces langages font du fonctionnel ?
Faire le lien entre la programmation fonctionnel et ce que l'on voit dans le lien entre
Habituellement quand on parle de fonctionnel dans ces langages on parle des opérations sur les listes (map, filter, fold, reduce)
Quand on déclare un élément, on lui déclare un type int, string, float
En fait le fonctionnel part d'une approche mathématique, on va avoir des éléments qui ont des types
TODO : transition
var a = 5;
a = 10;
En mathématiques la mutation n'a pas de sens. Ce concept a été reprit par la programmation fonctionnelle.
💡 Par exemple Scala utilise le mot clé val (valeur) et non pas var (variable)
Une fonction c'est un autre élément qui à un autre élément renvoie un élément.
let f:int -> int
Exemple multiplication par 2
Une fonction dans le mondre fonctionnel c'est une variable comme tout le reste.
La seule chose qui différencie une fonction d'une variable c'est son type.
La manière mathématique et donc fonctionnel de le définir, c'est de créer une fonction qui, à un paramètre, renvoie une nouvelle fonction
let g:int -> (int -> int)
Exemple multiplication par 2 puis addition
g a b : a+f(b)
Le récursif est l'outil itératif du fonctionnel qui permet de ne pas faire de saut ni de mutation.
function mult(a,b) {
var result = 0;
for _ from 0 to b {
result = result + a;
}
return result;
}
let m: int -> int -> int = (a, b) => {
return if b == 1 { a } else { m a b-1 }
}
Dans la seconde implémentation il n'y a pas d'instruction, tout est fonction, meme le if !
i8 en fonctionnel c'est l'ensemble {-128;128]
char = {'a'... 'z']
i8 U char = {'-128; 128';'a' -> 'z'} L'union des i8 et des char donne 256 + 26 valeur possibles, donc c'est un type somme
i8 X char = {(-128, 'a')...(127, 'a')
... ...
...(-128, 'z')...(127, 'z')}
Le produit entre ces deux ensembles donne 256 * 26 valeur possibles, donc c'est un type produit
Ouverture sur des fonctions récursives et comment elles permettent de répondre au même problème que les boucles impératives
Les différentes fonctions itératives fonctionnels ont été créé pour faire iso while, for en programmation impérative.
Même si les langages multi paradigme n'ont pas reprit le système de typage, ils ont reprit les différentes fonctions (map, filter, reduce).
Ces différentes fonctions ne sont pas vraiment du fonctionnel.