TUTORIEL ALGO/METHODES 
Les fonctions anonymes
Description d'une syntaxe particulière permettant de créer des fonctions quand et si le programme en a besoin. (20/01/2005)

Explication
Les fonctions anonymes, ou fonctions "lambda", ont vu le jour au sein du langage Lisp, l'un des tout premiers langages de programmation, et ont depuis fait leur chemin au sein de la plupart des langages courants, comme JavaScript, PHP, Java, C#, Perl ou Python.
Cette appellation décrit une syntaxe de programmation permettant des approches intéressantes; les fonctions anonymes, simplement, sont de petites fonctions (généralement une seule ligne) créées à la volée, ou de manière plus pratique, quand le besoin s'en fait sentir. Elles n'ont de fait pas de nom, d'où leur appellation.

L'existence d'une fonction anonyme dépend de données inconnues au moment de l'écriture, mais qui seront créées par le programme lors de l'exécution. Utilisée le plus souvent dès sa création, une telle fonction peut également être stockée dans une variable pour être utilisée plus loin dans le programme..
Ce type de fonction se révèle pratique lorsque l'on a besoin d'une fonction simple mais qui ne sera pas utilisée une deuxième fois dans le programme. Ces fonctions sont principalement créées pour interagir avec des fonctions qui attendent d'autres fonctions en argument. Cela permet souvent de simplifier et de condenser le code.

Application
Comme nous l'avons écrit, la plupart des langages modernes implémentent un mécanisme de fonctions anonymes, au point que certains les emploient sans même s'en rendre compte.

JavaScript, par exemple, autorise la création de fonction anonyme de manière très simple. Ainsi, cet appel classique :

var c = 0;
var o = document.getElementByTagName('clique');
for (var i=0; i<o.length; i++) {
  {
  o[i].onclick = alerte();
  }
function alerte()
  {
  c++;
  alert(c + " clicks!");
  }

Peut se résumer, en utilisant une fonction anonyme, à :

var c = 0;
var o = document.getElementByTagName('clique');
for (var i=0; i<o.length; I++) {
  {
  o[i].onclick = function() { c++; alert(c + " clicks!"): };
  }

Les fonctions anonymes sont d'ailleurs fréquemment utilisées au sein de bookmarlets.

  Forum

Réagissez dans les forums de JDN Développeurs

PHP, de son côté, propose directement un constructeur de fonctions anonymes, create_function(). Elle prend deux chaînes en arguments : la première indique la liste de paramètres de la fonction à créer, l'autre présente la fonction elle-même.

$temp = create_function('$x, $y', '$x++; $y--; return $x*$y;');

L'appel de la fonction est ensuite simple :

$res = temp(5, 3);

En Perl, les fonctions anonymes se font par référence :

my $temp = sub {
  my $message = shift;
  print $message;
  } ;
$temp->('Youpi!');

C# 2.0 aborde également les fonctions anonymes (ou méthodes anonymes) de manière très directe, via les delegates :

public delegate void Print (string s);
Print delegateVariable = delegate(string maChaine) { MessageBox.Show(maChaine); };

Enfin, en Java, on parle plus facilement de classe anonyme que de fonction anonyme, les fonctions sans nom étant interdites...

 
Xavier Borderie, JDN Développeurs
 
Accueil | Haut de page
 
 





Quand achetez-vous le plus en ligne ?
Du lundi au vendredi
Le samedi
Le dimanche

Tous les sondages