Fonctions et Variables

Tutoriaux, Sommaire JavaScript

1. Passage de variables
 
      On peut utiliser des variables dans une fonction si celle-ci sont déclarées à l'extérieur de cette fonction, c'était le cas dans la leçon précédente, les variables étaient toutes déclarées dans l'en-tête du programme, donc globales. C'est plus clair pour l'utilisation et évite certains problèmes que nous verrons dans cette leçon mais n'est pas strictement indispensable.
    En effet le fait d'affecter une variable comme,
    q = 10
    revient à définir la variable q, même si cette affectation se fait à l'intérieur d'une fonction.
    Function Essai(){
        q = 10
        //Instructions
        .................
    }
    La variable q pourra être utilisée à l'intérieur et à l'extérieur de la fonction Essai().

2. Arguments
 
      Nous avons vu que le nom de la fonction était suivi de deux parenthèses pouvant contenir des variables. Ceci est l'autre  manière de passer des valeurs à une fonction. Exemple ,
   var variableA
   var variableB
    function PassVariable(a, b){ 
        //Utilisation des variables dans la fonction
        if(a < 0){ 
            variableA = - a
            variableB = b * 5
        }
    }
    //Assignation des variables
    variableA = -3
    variableB = 101
    //Appel de la fonction
    PassVariable(variableA, variableB)
    //Affichage des résultats
    alert("variableA " + variableA + " variableB " + variableB)

   Dans la fonction PassVariable() nous passons les deux variables variableA et variableB respectivement aux variables locales a et b, par l'instruction,
   
PassVariable(variableA, variableB)
    Nous pouvons vérifier en effectuant ce programme dans la forme ci-dessous que puisque
variableA est < 0, (négative), on inverse le signe de variableA et on multiplie variableB par 5.
    Exercice, vérifiez que a et b sont locales à la fonction PassVariable(), c'est à dire non défini à l'extérieur de celle ci. Essayez d'utiliser la valeur a à l'extérieur de la fonction, dans le message alert(). Remplacez la variable
variableA, (pas la chaîne de caractères), par a. Corrigé . Explication


Code de la page:

     

    Il pourrait sembler plus simple de ne pas utiliser des variables différentes à l'intérieur de la fonction, mais simplement d'écrire,
   
function PassVariable(variableA, variableB){ 
        //Utilisation des variables dans la fonction
        if(variableA < 0){
            variableA = - variableA
            variableB = variableB * 5
        }
    }
    Modifiez le contenu de la forme ci-dessus, (faites Code initial avant pour corriger le message alert), ou faire Corrigé
    Vous observerez que
variableA et variableB sont toujours à -3 et à 101 dans le message alert(), comme si la fonction n'avait pas été effectuée. Vous pouvez inclure dans la fonction un message alert pour vérifier sont fonctionnement, Corrigé, vous pourrez vérifier que les valeurs de variableA et variableB sont bien modifiées à l'intérieur de la fonction mais non au-dehors. Même si elles portent le même nom que des variables globales, les variables passées en argument dans une fonction sont redéfinies comme locales pendant l'exécution de la fonction, comme si il s'agissait de variables tout à fait différentes.
    Dans le cas où l'on ne désire pas changer la valeur des variables passées en argument à l'extérieur de la fonction, le problème ci-dessus ne se pose pas, sinon passez par des variables locales comme a et b dans le premier exemple.

3. Tableau d'arguments
 
    Quand on passe des arguments à une fonction, ceux-ci sont maintenus dans un tableau nommé arguments[i]. nous verrons la manipulation de ce tableau ultérieurement

4. Return
 
    L'instruction return permet de retourner une valeur à l'endroit où est appelée la fonction. exemple,
    result = Carre(nombre)
    Carre() est une fonction calculant la carré d'un nombre, si cette fonction contient une instruction return retournant la valeur du carré de nombre, Carre(nombre) sera remplacé par la valeur du carré de nombre dans l'expression ci dessus.
    Soit nombre = 12
    result = Carre(nombre)
    =>     result = Carre(12)
    =>     result = 144
    Syntaxe de la fonction Carre(),
    function Carre(k){
        //Calcul du carré
        return k*k
    }
    Une telle fonction peut-être employée dans n'importe quelle expression complexe, comme,
    result = (Carre(nombre)/12)+100
    Dans ce cas la fonction s'emploie comme une instruction, (comme alert() par exemple).
  
Exercice, dans la forme ci-dessous, changer la valeur de nombre.
    Exercice, modifier la fonction pour calculer le cube, (puissance 3), d'un nombre. Corrigé.
    Exercice, écrire une expression complexe employant Carre()

Code de la page:

     

    A l'intérieur d'une fonction on peut appeler une autre fonction. Si on prend l'exemple précédent, de la fonction Carre(), on pourrait définir une fonction somme de carrés SommeCarre(),  telle que :
    soit deux nombres i et j la fonction SommeCarre() renverrait la somme i² + j²
    function SommeCarre(i, j){ 
        return Carre(i) + Carre(j)
    }
    Exercice, insérer la fonction SommeCarre() dans la forme ci-dessus, appeler là en donnant deux valeurs numériques à i et j, afficher le résultat dans une boite alert(). Corrigé

5. Récursivité
 
    Dans une fonction on peut appeler une autre fonction y compris elle-même, cette faculté s'appelle la récursivité.
    Nous allons prendre l'exemple d'un calcul de factorielle.
    La factorielle d'un nombre n est le produit des nombres de 1 à n, tel que 1 * 2 * 3 ..... (n-1) * n
    Exemple,
        factorielle 4 = 1 * 2 * 3 * 4 = 24
        factorielle 6 = 1 * 2 * 3 * 4 * 5 * 6 = 720
    Pour calculer la factorielle d'un nombre n, nous allons écrire une fonction
Factorielle(n), telle que,
    result = (n * Factorielle(n-1))
    return result
   Nous voyons que dans cette expression nous rappelons la fonction.
    Processus,
        Le calcul de la factorielle se compose d'une ligne de calcul de la factorielle et d'une ligne return, (retour du résultat d'un calcul intermédiaire). Si n = 4, à la première itération, n = 4 nous avons donc dans result <= 4 * Factorielle(3)
        Ce contenu de result n'est pas un nombre mais une Ce qui veut dire que vous ne pouvez pas éditer des résultats partiels expression, il sera donc évalué et Factorielle(3) sera effectuée, nous aurons à ce moment dans result, (2eme itération),
        result <= 4 * ( 3 * Factorielle(2))
        3eme itération
        result <= 4 * ( 3 * ( 2 * Factorielle(1))
        4eme itération, Factorielle(1) => 1
        result <= 4 * ( 3 * ( 2 * 1))
    Il faudra arrêter là les itérations, à ce moment on peut évaluer le contenu de result, (24). Dans le rappel de la fonction Factorielle() nous voyons que n est décrémenté de 1 à chaque itération, l'arrêt des itérations pourra se faire pour n = 1, on peut écrire,
function Factorielle(n) {
    if (n < 2){
        return 1
    }else {
        result = (n * Factorielle(n-1))
        return result
    }
}
    Tant que n est plus grand 1, les itérations se poursuivent, pour n < 2, (en fait 1), la dernière valeur d'itération est renvoyée, (1). A ce moment la valeur de la factorielle est calculée et retournée à l'instruction d'appel par exemple,
    résultat = Factorielle(nombre)

Code de la page:

     


Sommaire
Précédent Suivant