[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:00.76,0:00:11.53,Default,,0000,0000,0000,,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". Dialogue: 0,0:00:11.53,0:00:16.10,Default,,0000,0000,0000,,Cela ne vous dit probablement rien pour l'instant.\NCommençons donc par un exemple. Dialogue: 0,0:00:16.10,0:00:20.57,Default,,0000,0000,0000,,Ce programme permet de montrer la façon \Ndont j'ai grandit quand j'étais enfant. Dialogue: 0,0:00:20.57,0:00:24.56,Default,,0000,0000,0000,,Comme les humains grandissent chacun différemment,\NJ'ai fait cette fonction : calcInches (calcul la taille en pouces) Dialogue: 0,0:00:24.56,0:00:29.82,Default,,0000,0000,0000,,Je lui passe 3 paramètres : startAge (âge de départ), endAge (âge de fin) et inchesPerYear (nombre de pouces par an) Dialogue: 0,0:00:29.82,0:00:34.73,Default,,0000,0000,0000,,La fonction calcul l'augmentation de ma taille entre ces deux âges. Dialogue: 0,0:00:34.73,0:00:37.84,Default,,0000,0000,0000,,Et elle retourne le résultat au programme qui a appelé la fonction. Dialogue: 0,0:00:37.84,0:00:44.97,Default,,0000,0000,0000,,Vous voyez, ici, entre 0 et 8 ans, j'appelle la fonction en lui passant 0, 8 et 2,5 Dialogue: 0,0:00:44.97,0:00:48.74,Default,,0000,0000,0000,,car j'ai grandit de 2,5 pouces par an. Dialogue: 0,0:00:48.74,0:00:52.71,Default,,0000,0000,0000,,Le programme fait le calcul et retourne : 20. Dialogue: 0,0:00:52.71,0:00:58.24,Default,,0000,0000,0000,,Puis entre 8 et 16, j'appelle la fonction en lui passant 8, 16, puis 2 Dialogue: 0,0:00:58.24,0:01:02.38,Default,,0000,0000,0000,,car j'ai grandit moins vite. Et voyez, il calcul 16. Dialogue: 0,0:01:02.38,0:01:08.46,Default,,0000,0000,0000,,OK, super ! mais maintenant je voudrait afficher la taille totale que j'ai à 16 ans. Dialogue: 0,0:01:08.46,0:01:17.05,Default,,0000,0000,0000,,Comment faire ça ?...\NEn regardant mon code, je me demande : quelles valeurs j'ai à ma disposition ? Dialogue: 0,0:01:17.05,0:01:21.51,Default,,0000,0000,0000,,Est-ce que j'ai quelque chose qui représente ma taille totale ? Dialogue: 0,0:01:21.51,0:01:26.04,Default,,0000,0000,0000,,J'ai une variable "totalInches" à l'intérieur de ma fonction Dialogue: 0,0:01:26.04,0:01:30.82,Default,,0000,0000,0000,,donc je peux juste l'afficher et voir ce que ça donne. Dialogue: 0,0:01:30.82,0:01:36.44,Default,,0000,0000,0000,,Donc, j'écrit tout en bas : text(totalInches, 10, 200) Dialogue: 0,0:01:36.44,0:01:43.46,Default,,0000,0000,0000,,Voyons ce que ça donne... Oh Oh ! \NJ'ai une erreur quelque part ! Dialogue: 0,0:01:43.46,0:01:51.82,Default,,0000,0000,0000,,"totalInches" n'est pas définit.\NBizarre, car cette variable est définie ici ! Dialogue: 0,0:01:51.82,0:01:59.73,Default,,0000,0000,0000,,En fait le problème c'est que "totalInches" est définie\Nà l'intérieur de la fonction... Ici. Dialogue: 0,0:01:59.73,0:02:04.92,Default,,0000,0000,0000,,Quand on fait ça, la variable est considérée "locale". Dialogue: 0,0:02:04.92,0:02:09.74,Default,,0000,0000,0000,,Elle n'a une existence QUE dans la fonction... Ici. Dialogue: 0,0:02:09.74,0:02:15.01,Default,,0000,0000,0000,,Le code à l'extérieur de la fonction (tout ça...) ne \Nconnaît pas les variables locales des fonctions. Dialogue: 0,0:02:15.01,0:02:18.82,Default,,0000,0000,0000,,Il ne connaît que ce qui est retournée. Dialogue: 0,0:02:18.82,0:02:21.82,Default,,0000,0000,0000,,Il ne connaît que cette valeur... pas la variable. Dialogue: 0,0:02:21.82,0:02:26.37,Default,,0000,0000,0000,,Donc, quand on essaie d'utiliser la variable "totalInches" à l'extérieur de la fonction, il ne la connaît pas ! Dialogue: 0,0:02:26.37,0:02:31.34,Default,,0000,0000,0000,,Et du coup, il nous dit : "Hey, je ne connais pas cette variable, je ne peux pas l'afficher !". Dialogue: 0,0:02:31.34,0:02:37.61,Default,,0000,0000,0000,,Bon. Il y a un moyen pour que le code externe puisse utiliser cette variable. Dialogue: 0,0:02:37.61,0:02:41.87,Default,,0000,0000,0000,,C'est en transformant cette variable locale en variable "globale". Dialogue: 0,0:02:46.13,0:02:50.40,Default,,0000,0000,0000,,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". Dialogue: 0,0:02:50.40,0:02:58.66,Default,,0000,0000,0000,,Et maintenant, à l'intérieur de la fonction, on ne fait que changer sa valeur à chaque fois. On ne la déclare pas. Dialogue: 0,0:02:58.66,0:03:03.22,Default,,0000,0000,0000,,Regardez, le programme indique maintenant que le total est de 16. Dialogue: 0,0:03:03.22,0:03:06.65,Default,,0000,0000,0000,,Donc, il a trouvé la variable car on l'a rendue globale. Dialogue: 0,0:03:06.65,0:03:10.32,Default,,0000,0000,0000,,Mais, par contre, ça ne donne pas le résultat qu'on souhaite. Dialogue: 0,0:03:10.32,0:03:11.71,Default,,0000,0000,0000,,C'est seulement la valeur calculée la plus récente. Dialogue: 0,0:03:11.71,0:03:18.43,Default,,0000,0000,0000,,C'est parce qu'à chaque fois qu'on appelle la fonction, la variable "totalInches" calcul la valeur en fonction des paramètres. Dialogue: 0,0:03:18.43,0:03:22.23,Default,,0000,0000,0000,,Donc, ce qu'on a vraiment besoin de faire, c'est de créer une nouvelle variable Dialogue: 0,0:03:22.23,0:03:29.41,Default,,0000,0000,0000,,qu'on va utiliser pour spécialement calculer la somme des calculs qu'on va faire. Dialogue: 0,0:03:29.41,0:03:38.38,Default,,0000,0000,0000,,Donc revenons au code précédent avec notre variable locale.\NEt créons une nouvelle variable globale "lifeInches". Dialogue: 0,0:03:38.38,0:03:41.00,Default,,0000,0000,0000,,On va la faire commencer à 0. Dialogue: 0,0:03:41.00,0:03:49.98,Default,,0000,0000,0000,,Et, à l'intérieur de la fonction, on va calculer la somme :\NlifeInches += totalInches. Dialogue: 0,0:03:49.98,0:03:53.27,Default,,0000,0000,0000,,Donc, au fur et à mesure, ça va cumuler la valeur de "totalInches" Dialogue: 0,0:03:53.27,0:03:56.40,Default,,0000,0000,0000,,dans la variable globale "lifeInches". Dialogue: 0,0:03:56.40,0:03:59.87,Default,,0000,0000,0000,,Puis, tout en bas, on va afficher "lifeInches". Dialogue: 0,0:03:59.87,0:04:03.84,Default,,0000,0000,0000,,Et voilà ! \NLa taille total ! Dialogue: 0,0:04:03.84,0:04:06.69,Default,,0000,0000,0000,,Bon, ce n'est pas ma taille d'aujourd'hui...\NJe suis plus grand que ça ! Dialogue: 0,0:04:06.69,0:04:10.51,Default,,0000,0000,0000,,C'est parce qu'on ne naît pas avec une taille de zéro ! Dialogue: 0,0:04:10.51,0:04:13.48,Default,,0000,0000,0000,,Donc, si on débute la taille à... 20, par exemple. Dialogue: 0,0:04:13.48,0:04:17.26,Default,,0000,0000,0000,,Et voilà !\NVoilà ma taille (en pouces) à 16 ans ! Dialogue: 0,0:04:17.26,0:04:22.07,Default,,0000,0000,0000,, Dialogue: 0,0:04:22.07,0:04:27.50,Default,,0000,0000,0000,, Dialogue: 0,0:04:27.50,0:04:33.29,Default,,0000,0000,0000,, Dialogue: 0,0:04:33.29,0:04:37.82,Default,,0000,0000,0000,, Dialogue: 0,0:04:37.82,0:04:42.84,Default,,0000,0000,0000,, Dialogue: 0,0:04:42.84,0:04:47.02,Default,,0000,0000,0000,, Dialogue: 0,0:04:47.02,0:04:51.37,Default,,0000,0000,0000,, Dialogue: 0,0:04:51.37,0:04:54.65,Default,,0000,0000,0000,, Dialogue: 0,0:04:54.65,0:04:57.56,Default,,0000,0000,0000,, Dialogue: 0,0:04:57.56,0:05:01.67,Default,,0000,0000,0000,, Dialogue: 0,0:05:01.67,0:05:05.67,Default,,0000,0000,0000,,