🌿 Comprendre JS
Les fonctions
Citoyens de première classe

En javascript, les fonctions jouent un rôle crucial, et elles même sont considérées comme des "citoyens de première classe". Dans cet article, nous allons explorer ce concept en expliquant pourquoi elles sont si importantes en JavaScript.

Fonctions de Première Classe : Qu'est-ce que c'est ?

En programmation, les "citoyens de première classe" désignent les éléments du langage qui peuvent être traités de la même manière que d'autres éléments plus courants, tels que les variables, les nombres, les chaînes de caractères, etc. En JavaScript, les fonctions sont considérées comme des citoyens de première classe, ce qui signifie qu'elles peuvent être utilisées de manière polyvalente dans le langage.

Voici trois caractéristiques qui confèrent aux fonctions un rôle de premier plan en JavaScript :

1. Les fonctions peuvent être assignées à des variables

En JavaScript, vous pouvez attribuer une fonction à une variable, tout comme vous le feriez avec une valeur simple. Cela signifie que vous pouvez stocker une fonction dans une variable et l'utiliser ultérieurement. Voici un exemple :

function afficherDansLaConsole(texte) {
  console.log(texte);
}
 
// Attribution de la fonction à une variable
var afficher = afficherDansLaConsole;
 
// Appel de la fonction via la variable
afficher("Bonjour"); // Affiche "Bonjour !"

Dans cet exemple, nous avons assigné la fonction afficherDansLaConsole à la variable afficher et avons pu appeler la fonction à travers cette variable.

2. Les fonctions peuvent être passées en tant qu'arguments

En JavaScript, vous pouvez passer une fonction en tant qu'argument à une autre fonction. Cela vous permet d'utiliser des fonctions pour personnaliser le comportement de certaines opérations. Voici un exemple :

function multiplier(x, y) {
  return x * y;
}
 
function appliquerOperation(operation, x, y) {
  return operation(x, y);
}
 
var resultat = appliquerOperation(multiplier, 5, 3);
console.log(resultat); // Affiche 15

Dans cet exemple, nous avons passé la fonction multiplier en tant qu'argument à la fonction appliquerOperation, ce qui nous a permis de personnaliser l'opération effectuée.

3. Les fonctions peuvent être retournées par d'autres fonctions

En JavaScript, vous pouvez également retourner une fonction à partir d'une autre fonction. Cela permet de créer des fonctions d'ordre supérieur, c'est-à-dire des fonctions qui manipulent d'autres fonctions. Voici un exemple :

function multiplierPar(n) {
  return function(x) {
    return x * n;
  };
}
 
var doubler = multiplierPar(2);
console.log(doubler(5)); // Affiche 10

Dans cet exemple, la fonction multiplierPar retourne une nouvelle fonction qui peut être utilisée pour multiplier un nombre par n. Cela montre comment les fonctions peuvent être imbriquées et retournées comme n'importe quelle autre valeur.

Pourquoi est-ce utile de manipuler ainsi des fonctions ?

Nous avons exploré ce que signifie "fonctions de première classe" en JavaScript. Mais en quoi est-ce bénéfique pour un projet ? En quoi cela va-t-il nous aider à faire du code plus propre ?

1. Flexibilité et Réutilisation de Code

Les fonctions de première classe permettent une grande flexibilité dans la programmation JavaScript. Vous pouvez réutiliser des fonctions existantes, les combiner de différentes manières et les adapter à des besoins spécifiques en utilisant des fonctions d'ordre supérieur. Cela vous permet d'écrire un code plus propre et surtout plus modulaire.

2. Création de Fonctions Anonymes

En JavaScript, vous pouvez créer des fonctions anonymes, c'est-à-dire des fonctions sans nom, et les utiliser immédiatement. Cela s'avère utile pour les opérations ponctuelles. Par exemple :

const listeDesSalaries = [ 
    {nom:"Bill", service:"Marketing"},
    {nom:"Alice", service:"Tech"},
    {nom:"Marie", service:"Tech"},
    {nom:"Bob", service:"Marketing"},
]
 
var salariesTech = listeDesSalaries.filter(function(salarie) {
  return salarie.service === "Tech";
});
 
console.log(salariesTech); // [{ nom: 'Alice', service: 'Tech' }, { nom: 'Marie', service: 'Tech' }]

Dans cet exemple, nous avons défini une fonction anonyme et l'avons utilisée pour filtrer une liste. Les fonctions anonymes sont souvent utilisées dans des contextes tels que les événements et les rappels.

3. Manipulation de Fonctions à la Volée

Manipuler des fonctions à la volée peut être extrêmement puissant. Vous pouvez créer des fonctions dynamiquement, les passer comme arguments conditionnels ou les retourner en fonction de certaines conditions.

Exemple Pratique : Calcul de la Somme avec des Fonctions de Première Classe

Pour illustrer davantage l'importance des fonctions de première classe en JavaScript, considérons un exemple pratique. Supposons que nous souhaitons écrire une fonction calculer qui prend en compte deux nombres et une fonction pour effectuer une opération sur ces nombres. Voici comment nous pourrions le faire :

function additionner(x, y) {
  return x + y;
}
 
function soustraire(x, y) {
  return x - y;
}
 
function multiplier(x, y) {
  return x * y;
}
 
function calculer(x, y, operation) {
  return operation(x, y);
}
 
var resultat1 = calculer(5, 3, additionner);
console.log(resultat1); // Affiche 8
 
var resultat2 = calculer(5, 3, soustraire);
console.log(resultat2); // Affiche 2
 
var resultat3 = calculer(5, 3, multiplier);
console.log(resultat3); // Affiche 15

Dans cet exemple, nous utilisons la fonction calculer pour effectuer des opérations différentes sur les mêmes nombres en passant la fonction d'opération en tant qu'argument. Ainsi, les paramètres ne se limitent pas aux données. Il est aussi possible (et encouragé!) de paramétrer les comportements. Cela le code plus flexible et réutilisable.