Premiers pas en JavaScript
8.2 Paramètres facultatifs d'une fonction
cuy copyleft
  See You Why?  

 


fonctions à paramètres multiples (8.1) | | exercices relatifs aux fonctions avec paramètres multiples (8.8)

Contenu

 

 

I. Paramètres multiples

voir <<< séquence précédente

 

II. Paramètres facultatifs des fonctions

On a vu dans les séquences précédentes que l'on pouvait définier des fonctions sans arguments ou paramètres, ou des fonctions à un paramètres, voire même des fonctions à plusieurs paramètres.

Imaginons ici la création d'un script qui arrondisse une valeur. Le chapitre 12, relatif aux opérateurs mathématiques, ne vous apportera pas d'aide... la séquence 34.2, qui traite des méthodes de l'objet mathématique, va vous montrer que :
* Math.ceil(1.357)
   renvoie la valeur 2,
   car 2 est le plus petit entier supérieur ou égal à 1.357 ;
* Math.floor(13.57)
   renvoie la valeur 13,
   car 13 est le plus grand entier inférieur ou égal à 13.57 ;
* Math.round(-13.57)
   renvoie la valeur -14,
   car -14 est l'entier le plus proche de -13.57 qui est compris entre -14 et -13.

Magnifique, pour arrondir il me suffira d'employer Math.round(valeur)... Malheureusement non, car ces trois méthodes ci-dessus ne renvoient que des entiers et notre but est de pouvoir arrondir toute valeur avec 0, 1 voire 2 ou 4 chiffres après la virgule...

 

A. Une fonction à deux paramètres

Il nous suffira donc de définir une fonction qui devra avoir 2 paramètres, à savoir :
d'une part la valeur à arrondir,
d'autre part la précision que l'on souhaite obtenir (exprimée en nombre de chiffres souhaités).
Voilà donc notre fonction à deux paramètres qui prend forme :

function arrondir(valeur, precision){
}
 

Plus que trois informations à traiter et le problème sera résolu :

      1. on se rappellera que 10 = 101, que 100 = 102, que 1000 = 103, etc.
        et que le chiffre après la virgule indique des dixièmes, que deux chiffres après la virgule indique des centièmes, etc.
      2. donc pour arrondir à p chiffres après la virgule, on mutiplie par 10p, on arrondit ce produit à l'unité et enfin on divise cet entier arrondi par ce même 10p ;
      3. et notre rapide visite dans la séquence 34.2 nous a permis de découvrir que 10p se notera Math.pow(10,p).

Et le tour est joué... il ne reste qu'à traduire en lagage JS...

function arrondir(valeur, precision){
   provisoire = Math.pow(10,precision);
   alert(Math.round(valeur*provisoire)/provisoire);
}
 

 

 

B. Une fonction à un paramètre facultatif

Lorsque vous parlez de paramètre facultatif, vous voulez dire paramètre optionnel ? paramètre non obligatoire ? Mais si on n'affecte aucune valeur à ce paramètre, la fonction ne pourra jamais s'exécuter !
Erreur, en JS, une fonction peut s'exécuter valablement, contrairement à de nombreux langages, même si tous ses paramètres ne sont pas définis.

Il suffira de les nommer dans la définition de la fonction et de ne pas oublier de tester l'existence de ces paramètres dans la fonction.

Pour une question de facilité, on pourrait imaginer notre fonction arrondir() pour laquelle on ne stipule pas la précision... il suffirait alors de définir une valeur de 3 par défaut, si aucune autre valeur n'a été donnée, ou une valeur de 2 chiffres après la virgule s'il s'agit de prix.

Le chapitre 14 vous expliquera en détail comment soumettre des instructions à une condition. Retenez pour l'instant la structure
si (condition) {
   faire()
}

et en JS on notera if à la place de si .

Notre script retravaillé ci-dessous sera donc identique à celui développé ci-dessus, sauf qu'il permettra de ne pas définir le paramètre précision qui prendrait la valeur 3 si aucun autre argument ne lui a été donné :

function arrondir(valeur, precision){
   if ( typeof(precision) == 'undefined' ) {
      precision = 3;
   }
   provisoire = Math.pow(10,precision);
   alert(Math.round(valeur*provisoire)/provisoire);
}
 

Attention cependant, rappelons-nous qu'une variable est de type 'undefined' en JavaScript, si et seulement si elle n'a jamais été déclarée ou n'a jamais été affectée d'aucune valeur...
et que la fonction prompt() reçoit par défaut une valeur de type variable string... et que ne rien répondre renvoie une chaine vide ou "".

 

VIII. Exercices relatifs aux fonctions (à plusieurs paramètres)

voir suite >>>

 

 

IX. Test relatif aux fonctions (à plusieurs paramètres)

voir suite >>>

 

 


fonctions à paramètres multiples (8.1) | | exercices relatifs aux fonctions avec paramètres multiples (8.8)