Mot-clé return

Le mot-clé return en JavaScript

Le mot-clé return est souvent découvert dans un seul contexte : retourner une valeur depuis une fonction. Il remplit pourtant deux missions distinctes qu’il convient de bien distinguer.

Retourner une valeur

C’est l’usage le plus courant. Une fonction effectue un calcul et transmet son résultat à l’instruction qui l’a appelée :

javascript

function additionner(a, b) {
  return a + b;
}

const resultat = additionner(3, 5);
console.log(resultat); // 8

Sans return, la fonction exécute bien les instructions mais ne transmet aucune valeur : elle retourne undefined.

Stopper l’exécution d’une fonction

return peut également être utilisé seul, sans valeur, uniquement pour interrompre l’exécution d’une fonction à un moment précis. C’est l’usage qui a été vu dans le chapitre sur la géolocalisation :

javascript

function get_positionGPS() {
  if (!navigator.geolocation) {
    resultat.innerHTML = "La géolocalisation n'est pas supportée.";
    return; // la fonction s'arrête ici
  }

  // cette ligne n'est atteinte que si geolocation existe
  navigator.geolocation.getCurrentPosition(...);
}

Cette technique est appelée retour anticipé (early return). Elle évite d’imbriquer le reste du code dans un bloc else et rend la fonction plus lisible.

Sans return, le code continue

Il est important de comprendre que sans return, JavaScript continue d’exécuter les lignes suivantes même si une condition n’est pas remplie. Dans l’exemple ci-dessus, sans le return, l’appel à getCurrentPosition serait exécuté même en l’absence de géolocalisation, provoquant une erreur.

Une fonction ne peut retourner qu’une seule valeur

Dès que JavaScript rencontre un return, l’exécution de la fonction s’arrête immédiatement. Tout code placé après est ignoré :

javascript

function exemple() {
  return 42;
  console.log("Cette ligne n'est jamais exécutée.");
}

Pour retourner plusieurs valeurs, il est possible de les regrouper dans un tableau ou un objet :

javascript

function minMax(tableau) {
  return {
    min: Math.min(...tableau),
    max: Math.max(...tableau)
  };
}

const { min, max } = minMax([3, 1, 8, 2]);