Aller au contenu principal

Fonctions flèchées

Notions théoriques

Nous avons déjà vu un concept fondamental de la programmation : Les fonctions.

Rappel

En JavaScript, une fonction est un bloc de code conçu pour effectuer une tâche particulière.

Une fonction est exécutée lorsque quelque chose l'invoque (l'appelle).

Pour déclarer une fonction en JavaScript, nous utilisons le mot-clé function suivi du nom de la fonction, puis des parenthèses () qui peuvent contenir des paramètres.

Le code de la fonction est écrit entre accolades {}. Voici un exemple :

function direBonjour() {
console.log("Bonjour !");
}

Cette fonction, lorsqu'elle est appelée, affiche "Bonjour !" dans la console.

Une autre façon de déclarer des fonctions en JavaScript est d'utiliser des fonctions fléchées.

Les fonctions fléchées sont une syntaxe plus courte pour écrire des fonctions.

Voici comment nous pourrions réécrire la fonction direBonjour en utilisant une fonction fléchée :

const direBonjour = () => {
console.log("Bonjour !");
}
attention

Les fonctions fléchées sont particulièrement utiles lorsqu'on travaille avec des fonctions qui prennent d'autres fonctions en argument, comme c'est souvent le cas en JavaScript.

Exemple pratique

Supposons que nous voulons écrire une fonction qui prend 2 nombres en argument et renvoie leur somme.

Voici comment nous pourrions le faire :

function ajouter(n1, n2) {
return n1 + n2;
}

console.log(ajouter(5, 3)); // Affiche 8

Et voici comment nous pourrions écrire la même fonction en utilisant une fonction fléchée :

const ajouter = (n1, n2) => {
return n1 + n2;
}

console.log(ajouter(5, 3)); // Affiche 8

Différence entre une fonction nommée et une fonction fléchée

En JavaScript, nous avons vu qu'il existe 2 façons d’écrire une fonction :

  • La fonction nommée (ou classique)
  • La fonction fléchée (introduite avec ES6)

1. Fonction nommée (classique)

C’est la forme traditionnelle. Elle utilise le mot-clé function et peut être appelée avant sa déclaration grâce au mécanisme de hoisting.

function direBonjour() {
console.log("Bonjour !");
}

direBonjour(); // Affiche "Bonjour !"
  • ✅ Peut être appelée avant sa déclaration
  • ✅ Dispose de son propre this
  • ✅ Facile à lire et à comprendre

2. Fonction fléchée

La fonction fléchée est une syntaxe plus concise. Elle est souvent utilisée pour des fonctions courtes ou anonymes.

const direBonjour = () => {
console.log("Bonjour !");
}

direBonjour(); // Affiche "Bonjour !"
  • ✅ Syntaxe plus courte
  • ❌ Ne peut pas être appelée avant sa déclaration
  • ❌ Ne crée pas son propre this (elle hérite du this du contexte parent)
CaractéristiqueFonction nomméeFonction fléchée
Syntaxefunction nom() { ... }const nom = () => { ... }
Hoisting (appel avant)✅ Oui❌ Non
this✅ Propre à la fonction❌ Hérite du contexte parent
UtilisationFonctions généralesFonctions courtes, callbacks, méthodes anonymes

Bon à savoir : Pour des raisons de clarté et de lisibilité, on utilise souvent les fonctions fléchées dans les cas simples, et les fonctions classiques lorsqu'on a besoin d’un comportement plus complet (comme l’accès à this ou au nom de la fonction).

astuce

Une fonction fléchée peut avoir un nom, mais d'une manière un peu différente des fonctions traditionnelles.

Une fonction fléchée peut être stockée dans une variable, et c'est cette variable qui a un nom.

Voici un exemple :

const maFonction = () => {
console.log("Bonjour !");
}
maFonction(); // Affiche "Bonjour !"

Dans cet exemple, maFonction est le nom de la variable qui contient la fonction fléchée. On peut ensuite appeler la fonction en utilisant ce nom de variable.

Pourquoi parle-t-on de "fonction nommée" pour une fonction classique, alors qu’une fonction fléchée peut aussi avoir un nom ?

1. Fonction nommée : une question de définition

Quand on parle de fonction nommée, on fait référence à une fonction qui a un nom explicite dans sa déclaration, comme ceci :

function direBonjour() {
console.log("Bonjour !");
}

Ici, le nom de la fonction est directement défini : direBonjour.

Ce type de fonction est dit nommée car :

  • Elle a un identifiant propre (le nom direBonjour)
  • Ce nom est accessible dans la portée (utile pour la récursivité ou le débogage)
  • Elle peut être hoistée (appelée avant sa déclaration)

2. Fonction fléchée avec un nom ? Oui, mais indirectement

Quand on écrit une fonction fléchée comme ceci :

const direBonjour = () => {
console.log("Bonjour !");
};

La fonction n’est pas nommée en soi. C’est une fonction anonyme affectée à une variable appelée direBonjour.

  • La variable a un nom (direBonjour)
  • Mais la fonction elle-même n’a pas de nom interne explicite
  • Cela peut avoir un impact sur les messages d’erreur ou la récursivité

💡 En réalité, JavaScript attribue souvent automatiquement un "nom" à la fonction à partir de la variable, mais ce n’est pas la même chose qu’une déclaration nommée.


3. Une distinction plus précise

Pour être plus rigoureux, on peut distinguer :

Type de fonctionExempleNom réel ?Hoisting ?
Fonction nommée déclaréefunction maFonction() {}✅ Oui✅ Oui
Fonction anonyme affectée à une variableconst f = function() {}❌ Non❌ Non
Fonction fléchée affectée à une variableconst f = () => {}❌ Non❌ Non
Fonction nommée affectée à une variableconst f = function maFonction() {}✅ Oui❌ Non

On parle souvent de "fonction nommée" pour désigner les fonctions classiques déclarées avec function, car elles ont :

  • un nom explicite
  • un comportement particulier (hoisting, this, etc.)

Même si une fonction fléchée peut être assignée à une variable nommée, elle reste techniquement anonyme dans sa déclaration, sauf dans certains cas avancés.

Une fonction fléchée peut avoir un nom via une variable, mais ce n’est pas une fonction nommée au sens strict de la déclaration classique. La différence réside dans la syntaxe de déclaration et le comportement interne.

Paramètres vs Arguments : quelle différence ?

Ces deux termes sont souvent utilisés de manière interchangeable, mais ils ne désignent pas la même chose, même s’ils sont étroitement liés.

Paramètres

Les paramètres sont les variables définies dans la déclaration d’une fonction.
Ils servent de placeholders (emplacements) pour les valeurs que la fonction recevra.

function saluer(nom) {
console.log("Bonjour " + nom);
}

Ici, nom est un paramètre de la fonction saluer.


Arguments

Les arguments sont les valeurs réelles que l’on passe à la fonction lorsqu’on l’appelle.

saluer("Alice");

Ici, "Alice" est un argument passé à la fonction saluer.

TermeMoment d’utilisationExemple dans function saluer(nom) {}
ParamètreLors de la déclaration de la fonctionnom (variable)
ArgumentLors de l’appel de la fonction"Alice" (valeur)

Dans la pratique (et parfois dans la documentation), on utilise parfois le mot "argument" pour désigner les deux, par abus de langage ou pour simplifier.

Bon usage

  • Dans la déclaration → on parle de paramètres
  • Dans l’appel → on parle d’arguments

💡 Astuce mnémotechnique :
Paramètre = dans la Proclamation (déclaration)
Argument = dans l’Appel


Test de mémorisation/compréhension


Quel mot-clé est utilisé pour déclarer une fonction en JavaScript ?


Comment appeler une fonction nommée 'direBonjour' en JavaScript ?


Quelle est la syntaxe correcte pour une fonction fléchée qui ne prend pas de paramètres ?


Quelle est la valeur retournée par une fonction qui ne contient pas d'instruction 'return' ?


Quelle est la différence entre une fonction nommée et une fonction fléchée ?



TP pour réfléchir et résoudre des problèmes

Dans ce TP, vous allez approfondir votre compréhension des fonctions fléchées en réécrivant une fonction au format classique sous forme d'une fonction fléchée.

Avant de passer à la version fléchée, assurez-vous de bien comprendre comment écrire une fonction en utilisant la syntaxe classique.

Bien sûr ! Voici la version classique (non fléchée) de la fonction calculerAge, en respectant le même formalisme que précédemment.


TP : Version classique de la fonction calculerAge

Avant de passer à la version fléchée, assurez-vous de bien comprendre comment écrire une fonction en utilisant la syntaxe classique.

Version classique

Écrire une fonction calculerAge en utilisant le mot-clé function.

Cette fonction doit :

  • Prendre en paramètre une année de naissance.
  • Calculer l'âge actuel de la personne.
  • Retourner cet âge.

L'année actuelle peut être obtenue avec :
new Date().getFullYear()

Exemple d'utilisation

console.log(calculerAge(2000));  // Affiche l'âge de la personne née en 2000

À faire

Complétez le code suivant :

function calculerAge(anneeNaissance) {
...
}

console.log(calculerAge(2000)); // Affiche l'âge de la personne née en 2000
Une solution possible

Version fléchée

Vous devez écrire la fonction calculerAge en utilisant une fonction fléchée.

Cette fonction prend toujours une année de naissance en paramètre, et retourne l'âge de la personne en se basant sur l'année actuelle.

Contraintes

  • Utilisez une fonction fléchée.
  • Stockez la fonction dans une constante appelée calculerAge.
  • La fonction doit retourner l'âge, sans afficher directement dans la console.

À faire

Complétez le code suivant :

const calculerAge = (anneeNaissance) => {
...
}

console.log(calculerAge(1990)); // Affiche l'âge de la personne née en 1990

Vérifiez que votre fonction fonctionne bien pour différentes années de naissance.


Une solution possible