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
};
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 :
- donnée numérique au format texte => prendre en compte dans le calcul de la moyenne
- donnée non numérique => afficher une erreur
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;
}