or source Imperative Programming Ordinateur = machine à états Chaque instruction modifie l’état Développeur écrit toutes les instructions à exécuter Variables représentent des zones mémoires dont le contenu peut changer Exemples : C, Objective-C, Java...
seulement : • Pas d’effets de bord (les instructions ne peuvent pas modifier l’état) • Referential transparency (le résultat d’une méthode dépend uniquement des paramètres)
(n <= 2) { return 1; } int a = 1; int b = 1; for (int i = 2; i < n; i++) { int c = a + b; a = b; b = c; } return b; } 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... Fonctionnel : int fibonacci(int n) { if (n <= 2) { return 1; } return fibonacci(n, 1, 1); } int fibonacci(int n, int a, int b) { if (n == 2) { return b; } return fibonacci(n-1, b, a+b); } Focus on Functional Programming
des paramètres => même appel donne toujours les mêmes résultats => possibilité de stocker la valeur int fibonacci(int n) { if (n <= 2) { return 1; } return fibonacci(n-1) + fibonacci(n-2); } Focus on Functional Programming
que de x + pas d’effet de bord => a et b peuvent être évalués dans n’importe quel ordre Lazy evaluation a et b peuvent être exécutés dans n’importe quel ordre Focus on Functional Programming f(a(x), b(x)) a(x) b(x)
fichier, pas d’accès réseaux... Pas de random Pas d’effets de bord : Pas d’écriture dans un fichier, pas d’affichage à l’écran... Focus on Functional Programming
b 3) (if (< x (* a (+ b 7))) (while found (block (for i (range 2 5) (print i)) (if (== a 2) (break)))) (= p (cos 5))) (return (/ a 5)))) Focus on Functional Programming