image auteur
Lucas BENTO-VERSACE 10min • 28-12-2021

Javascript - Les fonctions

Javascript - Les fonctions

Dans cet article, vous allez apprendre comment utiliser les fonctions en JavaScript.

Définition

Les fonctions font partie des briques de base de la programmation, tout particulièrement en JavaScript qui est un langage orienté prototype.

Une fonction permet de regrouper des instructions dans un même bloc, relativement indépendant du reste du programme, afin de réaliser un certain traitement.

Une fonction peut être nommée, ce qui permet notamment sa réutilisabilité.

Analogie

Une fonction effectue toujours le même traitement. Elle utilise des données entrantes, et de ce traitement est issue une unique valeur de retour.

fonction-analogie-blender
Analogie du blender

Vous pouvez la voir comme un blender, qui prend en entrée des ingrédients, effectue toujours le même traitement (mixer), et fournit un résultat qui dépend des ingrédients placés en premier lieu.

Déclarer et appeler une fonction

Dans sa forme classique, une fonction :

  • est précédée du mot-clé function.
  • est nommée, avec les mêmes règles que pour les variables.
  • peut utiliser des paramètres, indiqués dans les parenthèses après le nom.
  • contient un bloc d’instructions entre accolades, placé après les parenthèses.
  • peut renvoyer une valeur, via le mot-clé return ce mot clé interrompt l'exécution de la fonction.

Une fois écrite, la fonction peut être appelée autant de fois que nécessaire, avec des arguments pouvant varier.

1
2
3
4
5
6
7
8
9
// Le nom de la fonction est 'add'
// a et b sont des paramètres
function add(a, b) {
  // renvoie la somme de a et b
  return a + b;
}

// 4 et 6 sont des arguments
const result = add(4, 6); // => 10
Déclaration d'une fonction

Les fonctions anonymes

Vous pouvez déclarer une fonction sans lui donner de nom. Cette fonction sera dite anonyme. On utilise souvent les fonctions anonymes quand on doit passer une fonction en paramètre d’une autre fonction.

1
2
3
4
5
// setTimeout prend une fonction en 1er paramètre
// La fonction n'est pas nommée
setTimeout(function(message){
    console.log("Hello !");
}, 1000);
Utilisation d'une fonction anonyme

Affecter une fonction à une variable

Vous pouvez affecter une fonction anonyme à une variable. Dans ce cas, vous utiliserez le nom de la variable pour appeler la fonction.

Il y a une légère différence entre les 2 méthodes :

1
2
3
4
5
6
7
8
9
const result = add(4, 6); // => add is undefined
const add = function (a, b) {
  return a + b;
}

const result = add(4, 6); // => 10
function add(a, b) {
  return a + b;
}
Différence entre une fonction nommée et une fonction stockée

Vous pouvez remarquer que la fonction nommée est déclarée avant l'exécution du script alors que dans le cas d'une variable, elle reste vide jusqu'à l'assignation.

Les fonctions fléchées

Une fonction fléchée est une fonction dont la notation est simplifiée pour en faciliter la lecture. Cette notation est apparue dans la version ES2015 (ES6).

Remarque : Une fonction fléchée est toujours anonyme.

Fonction anonyme :

1
2
3
const add = function (a, b) {
  return a + b;
}
Stored anonymous function

Fonction fléchée multiligne :

1
2
3
const add = (a, b) => {
  return a + b;
}
Fat arrow function

Fonction fléchée simplifiée :

1
const add = (a, b) => a + b;
Simplified fat arrow function

Notez qu'on ne peut utiliser la notation simplifiée que dans le cas où notre fonction ne contient qu'une ligne d'instruction. Dans ce cas, le return est sous-entendu.

Pourquoi utiliser les fonctions ?

Éviter la duplication de code

Vous serez souvent amenés à répéter des opérations au sein de vos programmes. Une fonction est un moyen de répéter plusieurs fois la même suite d'instructions sans avoir à la réécrire.

Exemple : Calculer une moyenne

Imaginez que vous devez calculer la moyenne des notes de plusieurs élèves.

Sans fonction

Si vous n'utilisez pas de fonction, vous obtenez 2 blocs de code très similaires :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
const billsRatings = [9, 14, 12];
const marysRatings = [15, 11, 13.5];

let billsSum = 0;
for (let index = 0 ; index < billsRatings.length ; index++) {
  billsSum += billsRatings[index];
}
const billsAverage = billsSum /  billsRatings.length;

let marysSum = 0;
for (let index = 0 ; index < marysRatings.length ; index++) {
  marysSum += marysRatings[index];
}
const marysAverage = marysSum /  marysRatings.length;
Calcul de la moyenne sans fonction

Vous remarquez que le même algorithme est utilisé sur des données différentes. Vos instructions sont dupliquées autant de fois que vous devez effectuer le calcul de la moyenne.

Avec fonction

Afin d'éviter la duplication, vous allez déplacer l'algorithme dans une fonction qui sera réutilisable.

1
2
3
4
5
6
7
8
9
10
11
12
13
function computeAverage(ratings) {
    let sum = 0;
    for (let index = 0 ; index < ratings.length ; index++) {
        sum += ratings[index];
    }
    return sum /  ratings.length;
}

const billsRatings = [9, 14, 12];
const marysRatings = [15, 11, 13.5];
// On appelle la fonction à deux reprises
const billsAverage = computeAverage(billsRatings);
const marysAverage = computeAverage(marysRatings);
Calcul de la moyenne avec fonction

Désormais, calculer une nouvelle moyenne ne vous demande que d'appeller la fonction computeAverage() 1 fois de plus.

Limiter les risques d'erreurs

Même un petit bloc de code, comme une formule mathématique, se prête à la factorisation en fonction : répéter plusieurs fois une même formule multiplie le risque d’une erreur d’inattention.

Exemple : Convertir une température

Imaginez cette fois-ci que vous devez convertir une température anglaise (°F), en température francaise (°C)

Formule : tempCelsius = (tempFahrenheit - 32) * 5 / 9

Sans fonction
1
2
3
4
5
6
7
8
const temperatureSeattleF = 66;
const temperatureDenverF = 92;
const temperatureChicagoF = 84;

const temperatureSeattleC = (temperatureSeattleF - 32) * 5 / 9;
const temperatureDenverC = (temperatureDenverF - 32) * 5 / 9;
// Oops
const temperatureChicagoC = (temperatureChicagoF - 32) / 5 * 9;
Conversion de température sans fonction

Vous pouvez remarquer une erreur qui s'est glissée de manière quasiment imperceptible à la ligne 8.

Avec fonction
1
2
3
4
5
6
7
8
9
10
11
function fahrenheitToCelcius(tempFahrenheit) {
   return (tempFahrenheit - 32) * 5 / 9; 
}

const temperatureSeattleF = 66;
const temperatureDenverF = 92;
const temperatureChicagoF = 84;

const temperatureSeattleF = fahrenheitToCelcius(temperatureSeattleF);
const temperatureDenverF = fahrenheitToCelcius(temperatureDenverF);
const temperatureChicagoF = fahrenheitToCelcius(temperatureChicagoF);
Conversion de température avec fonction

En utilisant une fonction, vous n'avez besoin d'écrire la formule qu'une seule fois. Il sera donc beaucoup plus facile de détecter une erreur.

Dans le cas où vous codez des tests unitaires, une fonction sera d'autant plus intéressante car il vous suffit de tester la fonction pour être assuré qu'elle fonctionnera comme prévu à chaque fois que vous l'utiliserez.

Conclusion

Vous venez de découvrir les fonctions en JavaScript. Si vous avez des idées d’amélioration pour cet article, laissez-nous un commentaire !

Et si vous avez réussi à tout suivre, vous pouvez passer au chapitre suivant : “Javascript - Les objets littéraux”

Sources

Auteur

image auteur
Lucas BENTO-VERSACE Alternant chez Codewise / Étudiant en développement web lucas.bentoversace@ynov.com
"Alternant chez Codewise, passioné par l'informatique et les technologies depuis mon plus jeune âge. J'ai découvert le monde du web et depuis je ne m'en lasse pas ! Fan de jeux vidéos, de sports et de musiques. "