WEBVTT 00:00:00.764 --> 00:00:11.532 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". 00:00:11.532 --> 00:00:16.096 Cela ne vous dit probablement rien pour l'instant. Commençons donc par un exemple. 00:00:16.096 --> 00:00:20.569 Ce programme permet de montrer la façon dont j'ai grandit quand j'étais enfant. 00:00:20.569 --> 00:00:24.562 Comme les humains grandissent chacun différemment, J'ai fait cette fonction : calcInches (calcul la taille en pouces) 00:00:24.562 --> 00:00:29.821 Je lui passe 3 paramètres : startAge (âge de départ), endAge (âge de fin) et inchesPerYear (nombre de pouces par an) 00:00:29.821 --> 00:00:34.727 La fonction calcul l'augmentation de ma taille entre ces deux âges. 00:00:34.727 --> 00:00:37.842 Et elle retourne le résultat au programme qui a appelé la fonction. 00:00:37.842 --> 00:00:44.969 Vous voyez, ici, entre 0 et 8 ans, j'appelle la fonction en lui passant 0, 8 et 2,5 00:00:44.969 --> 00:00:48.737 car j'ai grandit de 2,5 pouces par an. 00:00:48.737 --> 00:00:52.713 Le programme fait le calcul et retourne : 20. 00:00:52.713 --> 00:00:58.239 Puis entre 8 et 16, j'appelle la fonction en lui passant 8, 16, puis 2 00:00:58.239 --> 00:01:02.383 car j'ai grandit moins vite. Et voyez, il calcul 16. 00:01:02.383 --> 00:01:08.462 OK, super ! mais maintenant je voudrait afficher la taille totale que j'ai à 16 ans. 00:01:08.462 --> 00:01:17.050 Comment faire ça ?... En regardant mon code, je me demande : quelles valeurs j'ai à ma disposition ? 00:01:17.050 --> 00:01:21.512 Est-ce que j'ai quelque chose qui représente ma taille totale ? 00:01:21.512 --> 00:01:26.038 J'ai une variable "totalInches" à l'intérieur de ma fonction 00:01:26.038 --> 00:01:30.820 donc je peux juste l'afficher et voir ce que ça donne. 00:01:30.820 --> 00:01:36.440 Donc, j'écrit tout en bas : text(totalInches, 10, 200) 00:01:36.440 --> 00:01:43.457 Voyons ce que ça donne... Oh Oh ! J'ai une erreur quelque part ! 00:01:43.457 --> 00:01:51.816 "totalInches" n'est pas définit. Bizarre, car cette variable est définie ici ! 00:01:51.816 --> 00:01:59.731 En fait le problème c'est que "totalInches" est définie à l'intérieur de la fonction... Ici. 00:01:59.731 --> 00:02:04.925 Quand on fait ça, la variable est considérée "locale". 00:02:04.925 --> 00:02:09.736 Elle n'a une existence QUE dans la fonction... Ici. 00:02:09.736 --> 00:02:15.013 Le code à l'extérieur de la fonction (tout ça...) ne connaît pas les variables locales des fonctions. 00:02:15.013 --> 00:02:18.824 Il ne connaît que ce qui est retournée. 00:02:18.824 --> 00:02:21.824 Il ne connaît que cette valeur... pas la variable. 00:02:21.824 --> 00:02:26.368 Donc, quand on essaie d'utiliser la variable "totalInches" à l'extérieur de la fonction, il ne la connaît pas ! 00:02:26.368 --> 00:02:31.345 Et du coup, il nous dit : "Hey, je ne connais pas cette variable, je ne peux pas l'afficher !". 00:02:31.345 --> 00:02:37.609 Bon. Il y a un moyen pour que le code externe puisse utiliser cette variable. 00:02:37.609 --> 00:02:41.871 C'est en transformant cette variable locale en variable "globale". 00:02:46.133 --> 00:02:50.396 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". 00:02:50.396 --> 00:02:58.655 Et maintenant, à l'intérieur de la fonction, on ne fait que changer sa valeur à chaque fois. On ne la déclare pas. 00:02:58.655 --> 00:03:03.224 Regardez, le programme indique maintenant que le total est de 16. 00:03:03.224 --> 00:03:06.648 Donc, il a trouvé la variable car on l'a rendue globale. 00:03:06.648 --> 00:03:10.315 Mais, par contre, ça ne donne pas le résultat qu'on souhaite. 00:03:10.315 --> 00:03:11.712 C'est seulement la valeur calculée la plus récente. 00:03:11.712 --> 00:03:18.429 C'est parce qu'à chaque fois qu'on appelle la fonction, la variable "totalInches" calcul la valeur en fonction des paramètres. 00:03:18.429 --> 00:03:22.230 Donc, ce qu'on a vraiment besoin de faire, c'est de créer une nouvelle variable 00:03:22.230 --> 00:03:29.413 qu'on va utiliser pour spécialement calculer la somme des calculs qu'on va faire. 00:03:29.413 --> 00:03:38.378 Donc revenons au code précédent avec notre variable locale. Et créons une nouvelle variable globale "lifeInches". 00:03:38.378 --> 00:03:41.004 On va la faire commencer à 0. 00:03:41.004 --> 00:03:49.976 Et, à l'intérieur de la fonction, on va calculer la somme : lifeInches += totalInches. 00:03:49.976 --> 00:03:53.266 Donc, au fur et à mesure, ça va cumuler la valeur de "totalInches" 00:03:53.266 --> 00:03:56.403 dans la variable globale "lifeInches". 00:03:56.403 --> 00:03:59.867 Puis, tout en bas, on va afficher "lifeInches". 00:03:59.867 --> 00:04:03.838 Et voilà ! La taille total ! 00:04:03.838 --> 00:04:06.691 Bon, ce n'est pas ma taille d'aujourd'hui... Je suis plus grand que ça ! 00:04:06.691 --> 00:04:10.509 C'est parce qu'on ne naît pas avec une taille de zéro ! 00:04:10.509 --> 00:04:13.484 Donc, si on débute la taille à... 20, par exemple. 00:04:13.484 --> 00:04:17.265 Et voilà ! Voilà ma taille (en pouces) à 16 ans ! 00:04:17.265 --> 00:04:22.067 00:04:22.067 --> 00:04:27.499 00:04:27.499 --> 00:04:33.288 00:04:33.288 --> 00:04:37.816 00:04:37.816 --> 00:04:42.839 00:04:42.839 --> 00:04:47.024 00:04:47.024 --> 00:04:51.370 00:04:51.370 --> 00:04:54.646 00:04:54.646 --> 00:04:57.564 00:04:57.564 --> 00:05:01.674 00:05:01.674 --> 00:05:05.674