Maintenant que vous maîtrisez les fonctions, je souhaite vous parler q'un sujet qui n'est pas du tout évident : la différence entre les variables "locales" et les variables "globales".
Cela ne vous dit probablement rien pour l'instant. Commençons donc par un exemple.
Ce programme permet de montrer la façon dont j'ai grandit quand j'étais enfant.
Comme les humains grandissent chacun différemment, J'ai fait cette fonction : calcInches (calcul la taille en pouces)
Je lui passe 3 paramètres : startAge (âge de départ), endAge (âge de fin) et inchesPerYear (nombre de pouces par an)
La fonction calcul l'augmentation de ma taille entre ces deux âges.
Et elle retourne le résultat au programme qui a appelé la fonction.
Vous voyez, ici, entre 0 et 8 ans, j'appelle la fonction en lui passant 0, 8 et 2,5
car j'ai grandit de 2,5 pouces par an.
Le programme fait le calcul et retourne : 20.
Puis entre 8 et 16, j'appelle la fonction en lui passant 8, 16, puis 2
car j'ai grandit moins vite. Et voyez, il calcul 16.
OK, super ! mais maintenant je voudrait afficher la taille totale que j'ai à 16 ans.
Comment faire ça ?... En regardant mon code, je me demande : quelles valeurs j'ai à ma disposition ?
Est-ce que j'ai quelque chose qui représente ma taille totale ?
J'ai une variable "totalInches" à l'intérieur de ma fonction
donc je peux juste l'afficher et voir ce que ça donne.
Donc, j'écrit tout en bas : text(totalInches, 10, 200)
Voyons ce que ça donne... Oh Oh ! J'ai une erreur quelque part !
"totalInches" n'est pas définit. Bizarre, car cette variable est définie ici !
En fait le problème c'est que "totalInches" est définie à l'intérieur de la fonction... Ici.
Quand on fait ça, la variable est considérée "locale".
Elle n'a une existence QUE dans la fonction... Ici.
Le code à l'extérieur de la fonction (tout ça...) ne connaît pas les variables locales des fonctions.
Il ne connaît que ce qui est retournée.
Il ne connaît que cette valeur... pas la variable.
Donc, quand on essaie d'utiliser la variable "totalInches" à l'extérieur de la fonction, il ne la connaît pas !
Et du coup, il nous dit : "Hey, je ne connais pas cette variable, je ne peux pas l'afficher !".
Bon. Il y a un moyen pour que le code externe puisse utiliser cette variable.
C'est en transformant cette variable locale en variable "globale".
On peut faire ça en déplaçant la déclaration de la variable à l'extérieur de la fonction : c'est ce qu'on appelle la "portée globale".
Et maintenant, à l'intérieur de la fonction, on ne fait que changer sa valeur à chaque fois. On ne la déclare pas.
Regardez, le programme indique maintenant que le total est de 16.
Donc, il a trouvé la variable car on l'a rendue globale.
Mais, par contre, ça ne donne pas le résultat qu'on souhaite.
C'est seulement la valeur calculée la plus récente.
C'est parce qu'à chaque fois qu'on appelle la fonction, la variable "totalInches" calcul la valeur en fonction des paramètres.
Donc, ce qu'on a vraiment besoin de faire, c'est de créer une nouvelle variable
qu'on va utiliser pour spécialement calculer la somme des calculs qu'on va faire.
Donc revenons au code précédent avec notre variable locale. Et créons une nouvelle variable globale "lifeInches".
On va la faire commencer à 0.
Et, à l'intérieur de la fonction, on va calculer la somme : lifeInches += totalInches.
Donc, au fur et à mesure, ça va cumuler la valeur de "totalInches"
dans la variable globale "lifeInches".
Puis, tout en bas, on va afficher "lifeInches".
Et voilà ! La taille total !
Bon, ce n'est pas ma taille d'aujourd'hui... Je suis plus grand que ça !
C'est parce qu'on ne naît pas avec une taille de zéro !
Donc, si on débute la taille à... 20, par exemple.
Et voilà ! Voilà ma taille (en pouces) à 16 ans !