Premiers pas en JavaScript
9.1 Fonctions à instruction 'return'
cuy copyleft
  See You Why?  

 


test sur les fonction à paramètres multiples (8.9) | | exercices sur les fonctions avec 'return' (9.8)

Contenu

 

 

I. Fonction avec return

Nous venons de voir les fonctions sans paramètres et celles avec paramètres (unique ou multiples). Jusqu'ici, toutes les fonctions étudiées engendraient une action : le plus souvent écrire sur la page en cours ou envoyer une fenêtre pop-up avec un message.

Cependant, il est fréquent que l'on fasse appel à une fonction pour qu'elle nous retourne une valeur et seule la suite du programme dira ce qu'il faut faire de cette valeur retournée. En effet, les fonctions définissent souvent un processus qui reçoit des entrées et les utilise pour calculer une valeur à sortir. Ces fonctions utilisent généralement leurs arguments pour calculer une valeur qui deviendra le résultat de l'appel de fonction.
Return est le mot-clé de JS qui renvoie (ou retourne) une valeur lorsque la fonction est appelée.

Dans ce cas, la fonction ne pose aucun acte, elle ne fait qu'exécuter des instructions (de calcul, par exemple) et retourne une valeur à la ligne qui l'a appelée.

Dans les fonctions préétablies de JS, il en existe déjà de ce type... lorsque vous appelez la méthode replace() qui nécessite deux arguments (ou paramètres) indispensables, à savoir l'expression régulière de la chaine à remplacer et la chaine de remplacement, par laquelle il faut remplacer : chaine.replace(regExp, chaineDeRemplacement ), vous obtenez une nouvelle chaine de caractères, mais rien ne se passe avec cette chaine... c'est le contexte de votre programme qui dira s'il faut la retenir, la placer dans un fichier, l'afficher dans votre document HTML courant ou l'afficher dans une fenêtre pop-up.

Un exemple, si vous voulez trier une liste de patronymes (noms de famille), vous pourriez créer une fonction qui supprime les éventuels espaces d'un nom... en vue de pouvoir faire un tri par ordre alphabétique. L'usage que vous voudrez en faire n'est pas nécessairement un affichage à l'écran.

Avec le mot réservé return, la fonction en cours est capable de renvoyer une valeur au programme appelant (ou à une autre fonction appelante). Cette valeur est contenue dans une donnée en tout point comparable à une variable.

Le plus simple est d'illustrer notre propos par un exemple : il est fréquent qu'en math on doive utiliser le carré d'un nombre (c'est-à-dire le nombre fois le nombre)... pensons au théorème de Pythagore, à l'ajustement linéaire des moindres carrés et j'en passe...

On pourrait donc créer une fonction (la déclarer) ayant comme nom 'carre', ce qui donnerait :
function carre(x) {
       return (x*x);
}

Ainsi, à chaque appel, carre(5) prendrait la valeur 25, carre(4) la valeur 16, carre(2,5) la valeur 6,25 sauf qu'en JS on ne fait pas usage d'une virgule décimale, mais d'un point décimal, donc carre(2.5)=6.25, etc.
Lorsque dans une fonction, l'instruction return est rencontrée, l'expression qui suit ce return est évaluée et renvoyée au programme appelant et l'exécution de la fonction s'arrête, même si ce n'est pas la dernière ligne de la fonction... prudence donc. S'il y a plusieurs return dans le code, c'est le premier return rencontré qui mettra fin à l'exécution de la fonction.

Comme nous l'avons fait pour les fonctions à paramètre unique, nous devrons donc distinguer l'usage des paramètres dans la déclaration (définition) de la fonction et leur usage dans l'appel de la fonction.

Le but de ce chapitre est donc de créer des fonctions avec un ou plusieurs paramètres qui contiennent l'instruction return et de les appeler.

On parlait
d'une part de la définition de la fonction (ensemble d'instructions effectuées à créer) et
d'autre part d'un appel de la fonction.

Ces deux notions ont été abordées dans cette page.

 

A. un autre exemple sans paramètre

Comme déjà signalé plus haut, la fonction appelée ne doit pas nécessairement contenir de paramètres. On pourrait facilement imaginer une fonction bravo() qui envoie un message de félicitations en cas de réponse correcte ou mieux, dans quelques leçons, une fonction qui génère un message de félicitations aléatoire, ce qui éviterait l'éternelle apparition du même message en cas de réponse correcte.

Cette première fonction bravo() pourrait se définir (se déclarer) ainsi :

function bravo() {
        felic = "Félicitations ! Ta réponse est correcte, continue ainsi";
        return felic;
}

et l'appel de cette fonction va générer un message de félicitations, que le programme décidera d'afficher simplement à l'écran, éventuellement dans une fenêtre pop-up, voire en couleurs (cf. les manipulations de chaines).

Évidemment, si vous souhaitez avoir un message aléatoire, il vous faut encore un peu de patience (voir fonction aléatoire).

 

B. un exemple de fonction à plusieurs paramètres

Vous vous intéressez à la vente via le Net... JS n'est peut-être pas le logiciel le plus sûr à utiliser, PHP nous semble plus correct pour cet usage. Cependant, la réflexion concernant la programmation est la même... si le PHP vous intéresse, vous pourriez y revenir.

Il nous paraît évident qu'une fonction ajouterArticle() soit nécessaire à tout programme de vente sur Internet. Ce que le logiciel en fera, c'est le reste du programme qui le fixera : vérifier si le produit fait déjà partie de la commande, ajouter le ou les produits à la commande, calculer les montants hors TVA et TVA incluse, recalculer le poids de la commande (pour pouvoir calculer les frais de port), etc.

Cette fonction aura aussi besoin de paramètres pour faire son calcul : la référence ou libellé de l'article, la quantité commandée pour cet article, le prix unitaire hors TVA, le poids d'une unité commandée, une éventuelle commission supplémentaire ou une réduction sur cet article et évidemment le taux de TVA sur cet article. Cela pourrait donner naissance à une fonction de ce type :

function ajouterArticle(libelleProduit,qteProduit,prixProduit,poidsProduit,commissProduit,tvaProduit)

Et, si vous ne vous êtes pas endormi à la lecture de ses premiers pas en JS, vous pourriez contester que cette fonction ne puisse pas retourner une seule valeur unique au programme appelant... et vous avez raison. Il existe cependant un objet facilement manipulable en JS, à savoir les tableaux. Un seul tableau peut contenir diverses valeurs... ce sera l'objet de notre chapitre 26 "les tableaux" et suivants.

 

Exemple

<html>
<head><title>montant à facturer</title></head>
<body>
<script type="text/javascript">

function a_facturer(p_catal,reduc) {
     alert("Le prix catalogue hors TVA :" + p_catal +
        "\nLe prix HTVA réduction déduite est " + (p_catal - reduc/100*p_catal) +
        "\nLe prix à payer TVA comprise est " + 1.21 * ((p_catal - reduc/100*p_catal)));
        // d'autres instructions pourraient être notées ici
}


a_facturer(300,20);
a_facturer(800,25);
a_facturer(27.45,4);

 
</script>
</body>
</html>


Toujours attentif ? J'en doute, car vous nous auriez déjà écrit un mail pour nous annoncer que l'illustration ci-dessus n'est pas un exemple de fonction avec return.

 

C. un exemple de fonction à un seul paramètre

Vous vous intéressez toujours à la vente via le Net... Je suis certain que vous serez sensible à l'orthographe et vous suggère ici une fonction qui marque le pluriel des noms si nécessaire. Limitons-nous pour l'instant à la règle générale, à savoir un 's' pour marquer le pluriel.

Ne soyez pas effrayés par ce IF... ELSE... qui introduit une condition, nous y reviendrons au chapitre 15. En attendant, considérez que c'est un SI... SINON...

<script type="text/javascript">
function fPluriel(nbr) {
    if nbr<2 {
        return "";
    } else {
        return "s";
    }
}
</script>
 

On imaginera bien que le programme puisse compter le nombre d'articles achetés, ainsi que le nombre de rubriques concernées (pêche, chasse, nourriture animaux...). Le script devrait donc se poursuivre par un calcul de ces renseignements, mais ici nous envisagerons que les renseignements sont donnés :

var nbrArticles = 8;
var nbrRubriques = 1;
//var nbrArticles = fCalculerNbrArticles();
//var nbrRubriques = fCalculerNbrRubriques();
//trop tôt que pour développer ces fonctions
 

Il ne reste plus qu'à utiliser ces fonctions dans le script, par exemple pour afficher un petit message

document.write("Votre commande compte ",nbrArticles," article",fPluriel(nbrArticles));
document.write(" choisis dans ",nbrRubriques," rubrique",fPluriel(nbrRubriques));
 

Vous voilà prêt pour la suite du cours... vous venez de découvrir comment créer et appeler une fonction à paramètres multiples ou unique, avec instruction RETURN ou sans. Au niveau des fonctions, il ne vous reste pour l'instant qu'à découvrir les fonctions qui s'imbriquent l'une dans l'autre.

 

 

VIII. Exercices sur les fonctions à valeur retournée

voir suite >>>

 

 

IX. Test relatif aux fonctions à valeur retournée

voir suite >>>

 


test sur les fonction à paramètres multiples (8.9) | | exercices sur les fonctions avec 'return' (9.8)