Canalblog
Editer l'article Suivre ce blog Administration + Créer mon blog
Publicité
TEF - Thèses électroniques françaises
TEF - Thèses électroniques françaises
Publicité
Derniers commentaires
9 février 2011

Programmation fonctionnelle ou programmation lambda

La programmation fonctionnelle (PF) est un style de programmation basé sur l'évaluation d'expression et non sur l'exécution d'instruction.
Il s'agit de programmer par l'utilisation de fonctions comme boîtes noires emboitées les unes aux autres, cela nécessite la mise en œuvre de notions mathématiques comme la récursivité.

C'est ce qu'on pouvait retenir de l'introduction de la préconférence  « Introduction to Functional Programming with JavaScript » présenté au code{4}lib par un «adept» de la programmation fonctionnelle, ensuite on est rentré dans le vif sujet : la session s'est transformée en TP avec une quantité conséquentes d'exercices dont le but était d'écrire  des fonctions.

Cela a permis d'avoir pendant quelques heures une réflexion fonctionnelle de la programmation,
les notions majeures ont été abordées: first-class functions, lambda functions, higher order functions, closures, et function currying.
S'approprié ce type de programmation n'est pas chose facile, surtout si l'on a toujours programmer par « programmation dite impérative ».

Les avantages de la PF :  pas d'effets de bord, permet de factoriser le code, code plus lisible.

Exemples de langage fonctionnelles : haskell, ocaml, F#, erlang (ericsson), plutôt utilisé dans les secteur industriels, et pour l'informatique embarquée.
ex: qualcomm, at&t, facebook, twiter, credit suisse, yahoo, ericsson, citrix

On peut programmer fonctionnellement avec le langage javascript, pas mal de librairies javascript permettant de faire du javascript non intrusif utilise la PF : jquery, prototype...

Un sujet "chaud" que les développeurs doivent surveillés.

http://www.haskell.org

Exemples de fonctions écrites en PF:
// renvoi le nième élément d'une liste
var nth = function(n,xs){
     return(
         empty(xs) ? [] :
         (n == 0) ? first(xs) :
         nth(n-1, rest(xs))
     );
};

//renvoi une fonction avec les 2 arguments inversé
var flip = function (func) {
       return(
                 function(x,y){
                         func(y,x);
                 }
       );
};

Publicité
Publicité
Commentaires
Publicité