Day.png);">
Apprendre


Vous êtes
nouveau sur
Oniromancie?

Visite guidée
du site


Découvrir
RPG Maker


Apprendre
RPG Maker

Tutoriels
Guides
Making-of

Dans le
Forum

Section Entraide

Jeux: puie z / Jeux: Citymaime - Chapitre 1 / Jeux: Mer, îles et fous / News: Du neuf dans le making / News: Muma|Rope est disponible en (...) / Chat

Bienvenue
visiteur !




publicité RPG Maker!

Statistiques

Liste des
membres


Contact

Mentions légales

335 connectés actuellement

30729175 visiteurs
depuis l'ouverture

2792 visiteurs
aujourd'hui



Barre de séparation

Partenaires

Indiexpo

Akademiya RPG Maker

Blog Alioune Fall

Fairy Tail Constellations

RPG Fusion

Kingdom Ultimate

RPG Maker VX

New RPG Maker

Le Temple de Valor

Tous nos partenaires

Devenir
partenaire



EMG 06 : Les effets de bord

Où on découvre les effets de bord.

Ecrit par François Berhn le 20/06/2016


❤ 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).

Portion de code : Tout sélectionner

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 :

Portion de code : Tout sélectionner

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.



François Berhn - posté le 20/06/2016 à 23:15:00 (5402 messages postés)

❤ 0

Tonton Hellper

Bah en fait en ruby les variables ne stockent pas des valeurs mais des références à ces valeurs. Du coup quand tu fais array2 = array1, tu met dans la variable array2 la même référence que dans array1. Et c'est pareil pour int2 = int1.

En fait la nuance qui fait que ça ne marche pas de la même manière c'est qu'un int est un objet immuable là ou un array est un objet mutable.

Du coup dans la première fonction le x += 1 va créer une nouvelle valeur et faire pointer la variable locale x sur cette valeur. Ce qui fait que, si le x local et le x hors de la fonction avaient une référence partagée, ce n'est plus le cas après assignation d'une nouvelle valeur.

Cependant, dans le cas de l'array, il s'agit d'objet mutable et la commande x[0] = "coucou" ne va pas créer un nouvel objet mais modifier l'objet en place et de fait les deux variable vont continuer à pointer la même valeur.

Voici d'ailleurs une vidéo qui explique bien le truc (en python mais le principe est le même)



Edit : Wut ? pourquoi t'as effacé ton message ? XD

La liste des raisons pour lesquelles le making se meurt, la cinquième va vous étoner | Des projets abandonnés, source d'inspiration :D | Mes jeux


HuLijin - posté le 20/06/2016 à 23:22:51 (1004 messages postés)

❤ 0

Yeoun, mage-archère-louve

Je pensais te poser la question sur la slack, vu qu'effectivement ici c'était pas trop le propos de ta suite de tuto ^^

Merci pour l'explication.

M.V.

Suite à de nombreux abus, le post en invités a été désactivé. Veuillez vous inscrire si vous souhaitez participer à la conversation.

Haut de page

Merci de ne pas reproduire le contenu de ce site sans autorisation.
Contacter l'équipe - Mentions légales

Plan du site

Communauté: Accueil | Forum | Chat | Commentaires | News | Flash-news | Screen de la semaine | Sorties | Tests | Gaming-Live | Interviews | Galerie | OST | Blogs | Recherche
Apprendre: Visite guidée | RPG Maker 95 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker MV | Tutoriels | Guides | Making-of
Télécharger: Programmes | Scripts/Plugins | Ressources graphiques / sonores | Packs de ressources | Midis | Eléments séparés | Sprites
Jeux: Au hasard | Notre sélection | Sélection des membres | Tous les jeux | Jeux complets | Le cimetière | RPG Maker 95 | RPG Maker 2000 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker VX Ace | RPG Maker MV | Autres | Proposer
Ressources RPG Maker 2000/2003: Chipsets | Charsets | Panoramas | Backdrops | Facesets | Battle anims | Battle charsets | Monstres | Systems | Templates
Ressources RPG Maker XP: Tilesets | Autotiles | Characters | Battlers | Window skins | Icônes | Transitions | Fogs | Templates
Ressources RPG Maker VX: Tilesets | Charsets | Facesets | Systèmes
Ressources RPG Maker MV: Tilesets | Characters | Faces | Systèmes | Title | Battlebacks | Animations | SV/Ennemis
Archives: Palmarès | L'Annuaire | Livre d'or | Le Wiki | Divers