❤ 0 EMG 6 : Les effets de bord
I Introduction
Ce tutoriel fonctionne pour tous les RM. Son but est de vous présenter un concept de programmation -> les effets de bord. Il s'agit d'un concept que j'ai abordé dans le premier tuto sans l'expliquer.
Si c'est le premier tutoriel de la série que vous lisez, je vous conseille fortement de lire les précédents qui sont des aides à la compréhension de ce tutoriel.
II Définition
Pour vous expliquer le principe, voici un code à exécuter en appel de script dans votre RM favori, qui supporte ruby (XP, VX et VX ACE donc). Pour être sur de voir le résultat, assurez vous que le paramètre Jeu->Afficher la console soit coché pour ace (et probablement pour vx).
1
2
3
4
5
6
7
8
| def increment(x)
x += 1
return x
end
x = 3
a = increment(x)
p x
p a |
Donc pour résumer le code :
- On définit une fonction qui prend un nombre en paramètre, lui rajoute 1 et le retourne.
- On donne à la variable x la valeur 3
- Donne à la variable a le retour de la fonction avec x en paramètre (donc 4).
- On affiche x -> 3
- On affiche a -> 4
Ce que je tenais à vous montrer ici c'est que, même s'il y a utilisation d'une variable x dans et hors de la fonction, les deux ne sont pas les même.
C'est du au fait que les variables sont locales à leur contexte, par oppositions à des variables globales qui peuvent être utilisées partout.
Par exemple à chaque fois que la fonction incrément est appelée, une variable x est créée avec comme valeur le paramètres qui lui est assigné. Une fois la fonction terminée la variable est supprimée, d'où l'intérêt du retour pour ne pas perdre le valeur obtenue après incrémentation.
Maintenant voyons un autre exemple :
1
2
3
4
5
6
7
8
| def foo(x)
x[0] = coucou
return x
end
x = [0, 1, 2, 3]
a = foo(x)
p x
p a |
Donc pour résumer le code :
- On définit une fonction qui prend une liste en paramètre, et met coucou dans sa première case.
- On donne à la variable x la valeur [0, 1, 2, 3] (aka une liste)
- Donne à la variable a le retourne de la fonction avec x en paramètre (donc [coucou, 1, 2, 3]).
- On affiche x -> [coucou, 1, 2, 3]
- On affiche a -> [coucou, 1, 2, 3]
Et là, on se rend compte que la variable x, contrairement au premier cas, à été modifiée puisque qu'elle affiche le coucou qui a été ajouté par la fonction. Je n'expliquerai pas pourquoi, car ce n'est pas but de ce tuto, mais vous avez devant vous un exemple de ce qu'est un effet de bord : une modification autre que celle apportée par le retour.
III Et pour les events ?
Voici maintenant une explication de ce paragraphe, tiré du premier tutoriel :
Citation: Cependant, du fait que l'on se serve des effets de bord, je recommande chaudement d'allouer les variables utilisées dans le calcul à l'event commun, c'est à dire de ne pas les utiliser ailleurs que pour les définitions avant l'appel de l'event commun, pour lecture une fois le calcule terminé et dans l'event commun lui-même. |
Dans RPG Maker, toutes les variables sont globales et accessibles n'importe où. De fait, on peut plus ou moins dire que tout event modifiant une variable comme faisant de l'effet de bord. Ce qui en découle c'est qu'on est plus libre dans leur utilisation, mais on est restreint dans certaines situations. En effet, imaginez si deux event utilisent en même temps la même variables, les interférences risqueront de compromettre le bon déroulement de leur code.
C'est pourquoi il est fortement conseillé, dans les cadre des pseudo fonctions de s'arranger pour que les variables qu'elles utilisent ne soient pas modifiées ailleurs que l'assignation avant l'appel et la lecture après.
IV Conclusion
Le but de ce tutoriel n'était pas de vous apprendre une autre façon de programmer, mais pour vous mettre en garde par rapport aux soucis que peut engendrer l'utilisation de variables globales. Il est donc important que, bien que la réutilisation puisse aider à ne pas utiliser trop de variables, il faut tout de même faire attention pour ne pas se retrouver avec des effets indésirés.
|