Cours Apps Script : les fonctions (suite)

Il existe également les fonctions fléchées dont la syntaxe est plus courte que celles vues précédemment.


Fonction fléchée

Reprenons notre fonction "moyenne" de la page précédente :

function moyenne(nombre1, nombre2) {
  return (nombre1 + nombre2) / 2;
}

Cette même fonction peut s'écrire sous la forme d'une fonction fléchée comme ceci :

const moyenne = (nombre1, nombre2) => (nombre1 + nombre2) / 2;

Avec les arguments entre () à gauche de la flèche (s'il n'y a qu'un argument, les parenthèses ne sont pas nécessaires) :

(nombre1, nombre2)

Et la valeur à retourner à droite de la flèche :

(nombre1 + nombre2) / 2;

Si vous avez plus d'instructions que la seule valeur retournée, ajoutez des {} et précisez la valeur à retourner avec return :

const moyenne = (nombre1, nombre2) => {
  console.log('exemple');
  return (nombre1 + nombre2) / 2
};
Lorsque vous créez des fonctions, vous n'avez pas besoin de les écrire sous forme de fonction fléchée, la syntaxe classique convient très bien. Les fonctions fléchées sont davantage utilisées en argument de certaines méthodes telles que map, filter, sort, forEach, ..., que nous verrons un peu plus loin.

Exercice

Dans le dernier exemple, la fonction "moyenne" retournait la moyenne de 2 nombres, ce qui la rend inutilisable pour faire la moyenne d'un plus grand nombre de valeurs.

La nouvelle fonction "moyenne" devra être capable de retourner la moyenne en tenant compte de tous les nombres du tableau passé en argument (somme de toutes les valeurs divisée par le nombre de valeurs) :

// Moyenne en fonction d'un tableau de valeurs
function moyenne(tabNombres) {

  // A compléter ...

}

Complétez la fonction "moyenne" avant de passer à la solution un peu plus bas ...

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

Une solution commentée :

// Moyenne en fonction d'un tableau de valeurs
function moyenne(tabValeurs) {

  // Constante qui contient le nombre de valeurs du tableau
  const nbValeurs = tabValeurs.length;

  // Variable qui contiendra la somme des valeurs
  let total = 0;

  // Boucle en fonction du nombre de valeurs du tableau
  for (let i = 0; i < nbValeurs; i++) {

    // Addition de la valeur au total
    total += tabValeurs[i];
  }

  // Retourne la moyenne, donc la somme des valeurs divisée par le nombre de valeurs
  return total / nbValeurs;
}

Cette solution fonctionne très bien à condition que le tableau passé en argument soit toujours correct, ce qui ne sera pas forcément toujours le cas et dépendra notamment de la provenance des données ...

Pour commencer, vous pouvez vérifier s'il y a bien un tableau et si le tableau contient au moins une valeur.

Nous avons ici la constante nbValeurs :

const nbValeurs = tabValeurs.length;

Si le tableau est vide, nbValeurs vaudra 0 et s'il n'y a pas de tableau, nbValeurs vaudra undefined.

On peut donc ajouter une condition pour retourner un message d'erreur si nbValeurs contient l'une de ces valeurs :

if (nbValeurs === 0 || nbValeurs === undefined) {
  return 'ERREUR';
}

Dans ce cas, vous pouvez aussi simplifier la condition en utilisant l'opérateur ! :

if (!nbValeurs) {
  return 'ERREUR';
}

Il reste encore à gérer le cas des valeurs au format texte ...

Le comportement souhaité ici est le suivant :

Une solution consiste à convertir la valeur en nombre et à vérifier ensuite si c'est effectivement un nombre avec la fonction isNaN (is Not a Number) :

// Conversion en nombre
const nombre = Number(tabValeurs[i]);

// Si non numérique
if (isNaN(nombre)) {
  return 'NON NUMERIQUE';
}

La fonction "moyenne" est désormais capable de gérer plein de cas particuliers :

// Pour tester avec différentes données
function test() {
  console.log(moyenne([10, 20])); // Affiche : 15
  console.log(moyenne([-40, 0, 10])); // Affiche : -10
  console.log(moyenne(['-40', '0', 10])); // Affiche : -10
  console.log(moyenne([0, 1, 2, 3, 4, 5, 6, 7])); // Affiche : 3.5
  console.log(moyenne(['5'])); // Affiche : 5
  console.log(moyenne([])); // Affiche : ERREUR
  console.log(moyenne([5, 'test'])); // Affiche : NON NUMERIQUE
  console.log(moyenne(45, 35)); // Affiche : ERREUR
}

Le code complet de la fonction "moyenne" :

// Moyenne en fonction d'un tableau de valeurs
function moyenne(tabValeurs) {

  // Constante qui contient le nombre de valeurs du tableau
  const nbValeurs = tabValeurs.length;

  // Si le nombre de valeurs du tableau est de 0 (ou undefined), retourne un message d'erreur
  if (!nbValeurs) {
    return 'ERREUR';
  }

  // Variable qui contiendra la somme des valeurs
  let total = 0;

  // Boucle en fonction du nombre de valeurs du tableau
  for (let i = 0; i < nbValeurs; i++) {

    // Conversion en nombre
    const nombre = Number(tabValeurs[i]);

    // Si non numérique
    if (isNaN(nombre)) {
      return 'NON NUMERIQUE';
    }

    // Addition de la valeur au total
    total += nombre;
  }

  // Retourne la moyenne, donc la somme des valeurs divisée par le nombre de valeurs
  return total / nbValeurs;
}