1 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". 2 00:00:11,532 --> 00:00:16,096 Cela ne vous dit probablement rien pour l'instant. Commençons donc par un exemple. 3 00:00:16,096 --> 00:00:20,569 Ce programme permet de montrer la façon dont j'ai grandit quand j'étais enfant. 4 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) 5 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) 6 00:00:29,821 --> 00:00:34,727 La fonction calcul l'augmentation de ma taille entre ces deux âges. 7 00:00:34,727 --> 00:00:37,842 Et elle retourne le résultat au programme qui a appelé la fonction. 8 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 9 00:00:44,969 --> 00:00:48,737 car j'ai grandit de 2,5 pouces par an. 10 00:00:48,737 --> 00:00:52,713 Le programme fait le calcul et retourne : 20. 11 00:00:52,713 --> 00:00:58,239 Puis entre 8 et 16, j'appelle la fonction en lui passant 8, 16, puis 2 12 00:00:58,239 --> 00:01:02,383 car j'ai grandit moins vite. Et voyez, il calcul 16. 13 00:01:02,383 --> 00:01:08,462 OK, super ! mais maintenant je voudrait afficher la taille totale que j'ai à 16 ans. 14 00:01:08,462 --> 00:01:17,050 Comment faire ça ?... En regardant mon code, je me demande : quelles valeurs j'ai à ma disposition ? 15 00:01:17,050 --> 00:01:21,512 Est-ce que j'ai quelque chose qui représente ma taille totale ? 16 00:01:21,512 --> 00:01:26,038 J'ai une variable "totalInches" à l'intérieur de ma fonction 17 00:01:26,038 --> 00:01:30,820 donc je peux juste l'afficher et voir ce que ça donne. 18 00:01:30,820 --> 00:01:36,440 Donc, j'écrit tout en bas : text(totalInches, 10, 200) 19 00:01:36,440 --> 00:01:43,457 Voyons ce que ça donne... Oh Oh ! J'ai une erreur quelque part ! 20 00:01:43,457 --> 00:01:51,816 "totalInches" n'est pas définit. Bizarre, car cette variable est définie ici ! 21 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. 22 00:01:59,731 --> 00:02:04,925 Quand on fait ça, la variable est considérée "locale". 23 00:02:04,925 --> 00:02:09,736 Elle n'a une existence QUE dans la fonction... Ici. 24 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. 25 00:02:15,013 --> 00:02:18,824 Il ne connaît que ce qui est retournée. 26 00:02:18,824 --> 00:02:21,824 Il ne connaît que cette valeur... pas la variable. 27 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 ! 28 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 !". 29 00:02:31,345 --> 00:02:37,609 Bon. Il y a un moyen pour que le code externe puisse utiliser cette variable. 30 00:02:37,609 --> 00:02:41,871 C'est en transformant cette variable locale en variable "globale". 31 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". 32 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. 33 00:02:58,655 --> 00:03:03,224 Regardez, le programme indique maintenant que le total est de 16. 34 00:03:03,224 --> 00:03:06,648 Donc, il a trouvé la variable car on l'a rendue globale. 35 00:03:06,648 --> 00:03:10,315 Mais, par contre, ça ne donne pas le résultat qu'on souhaite. 36 00:03:10,315 --> 00:03:11,712 C'est seulement la valeur calculée la plus récente. 37 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. 38 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 39 00:03:22,230 --> 00:03:29,413 qu'on va utiliser pour spécialement calculer la somme des calculs qu'on va faire. 40 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". 41 00:03:38,378 --> 00:03:41,004 On va la faire commencer à 0. 42 00:03:41,004 --> 00:03:49,976 Et, à l'intérieur de la fonction, on va calculer la somme : lifeInches += totalInches. 43 00:03:49,976 --> 00:03:53,266 Donc, au fur et à mesure, ça va cumuler la valeur de "totalInches" 44 00:03:53,266 --> 00:03:56,403 dans la variable globale "lifeInches". 45 00:03:56,403 --> 00:03:59,867 Puis, tout en bas, on va afficher "lifeInches". 46 00:03:59,867 --> 00:04:03,838 Et voilà ! La taille total ! 47 00:04:03,838 --> 00:04:06,691 Bon, ce n'est pas ma taille d'aujourd'hui... Je suis plus grand que ça ! 48 00:04:06,691 --> 00:04:10,509 C'est parce qu'on ne naît pas avec une taille de zéro ! 49 00:04:10,509 --> 00:04:13,484 Donc, si on débute la taille à... 20, par exemple. 50 00:04:13,484 --> 00:04:17,265 Et voilà ! Voilà ma taille (en pouces) à 16 ans ! 51 00:04:17,265 --> 00:04:22,067 52 00:04:22,067 --> 00:04:27,499 53 00:04:27,499 --> 00:04:33,288 54 00:04:33,288 --> 00:04:37,816 55 00:04:37,816 --> 00:04:42,839 56 00:04:42,839 --> 00:04:47,024 57 00:04:47,024 --> 00:04:51,370 58 00:04:51,370 --> 00:04:54,646 59 00:04:54,646 --> 00:04:57,564 60 00:04:57,564 --> 00:05:01,674 61 00:05:01,674 --> 00:05:05,674