Académique Documents
Professionnel Documents
Culture Documents
(Functional Programming)
1
La Programmation Fonctionnelle ( Functional Programming)
A
Par
def add(x, y):
OMRANI M.
sum = 0
for x in L: 🡺 return x + y
sum += x sum = reduce(add, L)
2
La Programmation Fonctionnelle ( Functional Programming)
Notez que, dans la programmation fonctionnelle, il est presque impossible de définir une fonction qui ne
prend aucun argument et ne renvoie aucune valeur.
Ceci contraste avec la programmation impérative, où l'utilisation de telles fonctions est logique car elles
peuvent modifier certains états internes (d'un objet par exemple).
A
Par
OMRANI M.
3
La Programmation Fonctionnelle ( Functional Programming)
function sum($array) {
Même si nous n'avons pas défini la fonction saveToDatabase
$sum = 0;
() (par exemple, elle provient d'un framework que nous
foreach ($array as $value) {
utilisons), cela reste un effet secondaire.
$sum += $value;
Si nous exécutons à nouveau la même fonction, elle
}
retournera la même valeur, mais l'état final est différent. Par
saveToDatabase($sum);
exemple, il créera deux fois l'enregistrement dans la base de
return $sum;
données.
}
sum([5, 1, 3, 7, 9]);
A
Par
OMRANI M.
4
La Programmation Fonctionnelle ( Functional Programming)
A
Par
OMRANI M.
5
La Programmation Fonctionnelle ( Functional Programming)
Bonne Pratique: Functional programming in PHP
Eviter les données mutables
Ce concept est simple avec des types de données primitifs, par exemple:
Cependant, en travaillant avec des collections, ce principe nécessite la création d’un nouvelle collection et copie des
valeurs de l'ancienne collection au nouveau:
Ce concept de collections immuables (ou objets en général) est devenu très
populaire en JavaScript avec des bibliothèques telles que Immutable.js, faites par
function greaterThan($collection, $threshold) { Facebook (https://facebook.github.io/immutable-js/), ou le mécanisme de détection
$out = []; des modifications onPush dans Angular2.
foreach ($collection as $val) { En plus de rendre notre code plus prévisible, lorsqu'il est utilisé de manière appropriée,
if ($val > $threshold) { il simplifiera la vérification des modifications dans les grandes collections car, si l'un de
$out[] = $val; ses éléments a changé, la collection entière est remplacée par une nouvelle instance.
} En PHP, il existe déjà des bibliothèques qui facilitent cette tâche, par exemple
} Immutable.php (https://github.com/jkoudys/immutable.php). Par exemple, PHP 5.5+
est livré avec une version immuable de la classe DateTime appelée DateTimeImmutable
return $out;
par défaut.
}
greaterThan([5, 12, 8, 9, 42], 8);
// will return: [12, 9, 42] 6
La Programmation Fonctionnelle
(Functional Programming)
Travaux Pratiques (Python)
7
Python est un langage de programmation
objet interprété, multi-paradigme et
multiplateformes.
A
Par
OMRANI M.
8
>>>
La Programmation Fonctionnelle ( Functional Programming)
A
Par
OMRANI M.
9
>>>
La Programmation Fonctionnelle ( Functional Programming)
A
Par
OMRANI M.
10
La Programmation Fonctionnelle ( Functional Programming)
Écrivez une fonction compose1 qui prend deux arguments (deux fonctions), et en retourne la fonction
composée. Les fonctions en argument seront donnés dans l'ordre de leur application.
A
Par
OMRANI M.
11
Exemple de la programmation fonctionnelle en Pyhton
def x2(n):
return n*2
limap = list()
for e in liste:
limap.append(fonc(e))
return limap
liste = [1, 2, 3, 4, 5]
print(mymap(x2, liste))
A
Par
OMRANI M.
12
La Programmation Fonctionnelle ( Functional Programming)
Bonne Pratique: Functional programming in Python
Exercice 2
Programmation, récursivité On souhaite écrire une fonction récursive qui calcule la puissance xb ,
pour x, b ≥ 0.
1. Donnez une définition récursive dans un style mathématique pour cette fonction.
Rappel : voici la définition mathématique de la factorielle :
A
Par
OMRANI M.
13
Présentation des fonctions lambda
>>> def f(x):
return x*2
>>> f(3) 6
A
Par
Remarquez aussi que la fonction n’a pas de nom, mais qu’elle peut être appelée à travers la variable à laquelle elle est
OMRANI M.
assignée.
Vous pouvez utiliser une fonction lambda sans l’assigner à une variable. Ce n’est pas forcément très utile, mais cela
démontre qu’une fonction lambda est simplement une fonction en ligne.
14
Notez-bien:
Reduce Map
Nous pouvons utiliser la fonction reduce pour Voici comment nous pourrions utiliser map pour ajouter
calculer la somme des éléments. 10 ou 20 à chaque élément d'une liste:
A
Par
OMRANI M.
15
La Programmation Fonctionnelle ( Functional Programming)
Bonne Pratique: Functional programming in Python
Composition de fonctions
Imaginons que nous voulions appliquer plusieurs fonctions de façon séquentielle. Par exemple :
>>> x2 = lambda a: a * 2
>>> plus5 = lambda a: a + 5
>>> plus5(x2(3))
Resultat ???
>>> x2plus5 = lambda a: plus5(x2(a))
>>> x2plus5(3)
Resultat ???
A
Par
OMRANI M.
16
La Programmation Fonctionnelle ( Functional Programming)
Bonne Pratique: Functional programming in Python
Composition de fonctions
Imaginons que nous voulions appliquer plusieurs fonctions de façon séquentielle. Par exemple :
>>> x2 = lambda a: a * 2
>>> plus5 = lambda a: a + 5
>>> plus5(x2(3)) # (3 * 2) + 5
11
>>> x2plus5 = lambda a: plus5(x2(a))
>>> x2plus5(3)
11
Ici, on dit que la fonction x2plus5 est la composée des fonctions x2 et plus5, c'est-à-dire qu'elle applique à son argument, successivement,
la fonction x2 puis la fonction plus5.
A
Par
OMRANI M.
17
La Programmation Fonctionnelle ( Functional Programming)
Bonne Pratique: Functional programming in Python
Exercice 3
Ecrire la Fonction Python nombres_amicaux(n) qui affiche tous les nombre amicaux inférieur ou égale à
n, n entier positif passé en paramètre.
a et b deux entiers positifs sont dits amicaux si chacun des deux nombres est égal à la somme des diviseurs
stricts de l'autre (diviseurs autres que lui-même).
A
Par
OMRANI M.
18