E-magination
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.


~ S'évader de la banalité... Et entrer dans l'imaginaire ! ~
 
AccueilGuelnika, le site de E-m !ChatS'enregistrerConnexion
Le Deal du moment : -17%
(Black Friday) Apple watch Apple SE GPS + Cellular ...
Voir le deal
249 €

 

 EMG1 : pseudo-fonctions

Aller en bas 
3 participants
AuteurMessage
Hellper
Petit Maker Lv 3
Petit Maker Lv 3
Hellper


Nombre de messages : 57
Age : 31

EMG1 : pseudo-fonctions Empty
MessageSujet: EMG1 : pseudo-fonctions   EMG1 : pseudo-fonctions Icon_minitimeVen 31 Mar 2017, 11:16

I Introduction

Ce tutoriel fonctionne pour tous les RM. Son but est de vous montrer comment gagner du temps dans la conception de systèmes grâce à un concept de programmation intéressant qu'est la factorisation du code.

Je ne suis pas le premier découvreur de cette approche, ni le premier à en parler. Mais n'ayant vu que très peu de ressources sur le sujet il me semble intéressant d'en faire mention.

De plus j'ai tenté d'expliquer le plus possible le fonctionnement du code, mais un bonne conaissance de base en programmation event de RPG Maker est recommandée pour bien comprendre ce dont il est question.

II Définition
En programmation la factorisation du code est une méthode qui consiste à définir du code de manière souple pour pouvoir le réutiliser dans différents contextes sans avoir à l'écrire plusieurs fois de suite. Un des moyens de faire cela est d'utiliser des fonctions. Par exemple si on souhaite recoder la puissance en ruby :

Code:
nombre = 2
puissance = 3
accumulateur = 0
while true
  if puissance == 0
    break
  end
  accumulateur *= nombre
  puissance -= 1
end
puts accumulateur

Le code n'est pas le plus optimisé du monde car je l'ai fait pour ressembler à du code event de RM. Il pourrait d'ailleurs être écrit dans ce dernier comme ceci :

EMG1 : pseudo-fonctions TutoPow

Voilà vous avez un bout de code qui permet de calculer une puissance (à savoir 2 puissance 3 et donc 8). Mais que faire si on veut calculer la puissance plusieurs fois ? Le seul moyen avec cette méthode est de copier-coller le code à la suite pour afficher une a une les puissances.

Sauf que :
- Ça génère un code très long et pas forcément agréable à lire.
- Si vous vous apercevez d'une erreur dans votre code (comme c'est volontairement le cas dans mon exemple en ruby) il ne vous restera plus qu'à modifier une à une vos copies, quel bonheur !

III Les fonctions
De fait il est possible en ruby de faire quelque chose de bien plus intéressant comme ceci :

Code:

def power(nombre, puissance)
  accumulateur = 1
  while true
    if puissance == 0
      break
    end
    accumulateur *= nombre
    puissance -= 1
  end
  return accumulateur
end
puts power(2, 3)

Si vous n'avez jamais programmé en dehors de RM, ce code peut vous paraître bien étrange. Aussi vais-je prendre le temps de vous l'expliquer.

Code:
def power(nombre, puissance)
Ici on définit une fonction avec deux paramètres : nombre et puissance

Code:
accumulateur = 1
  while true
    if puissance == 0
      break
    end
    accumulateur *= nombre
    puissance -= 1
  end
  return accumulateur
end

Là rien de compliqué, on définit sans l'executer le même code qu'avant, c'est à dire qu'on calcule le résultat de la puissance dans la variable accumulateur qu'on renvoie avec l'instruction return. Pour finir :

Code:
puts power(2, 3)
Va appeler la fonction power définie plus tôt en lui donnant deux paramètres, à savoir 2 pour nombre et 3 pour puissance. La fonction va alors exécuter le code qu'elle contient et renvoyer l'accumulateur dont la valeur va être utilisée sur l'instruction puts pour afficher le résultat.

Et maintenant si on veut afficher une autre puissance ? C'est simple, il suffit de copier la dernière ligne et de changer les paramètres pour faire par exemple :

Code:
puts power(1, 3)
puts power(2, 4)
puts power(4, 2)
...

IV Et pour les events ?
Malheureusement pour les pauvres makers que nous sommes, RPG Maker ne permet pas de définir ses fonctions. Mais il dispose d'un outil assez semblable qui est l'event commun. En effet, tout comme la fonction l'event commun est un morceau de code qui peut être appelé à n'importe quel moment.

Ce pendant, il ne dispose pas de deux éléments importants d'une fonction que sont la possibilité d'ajouter des paramètres et celle de retourner une valeur. Heureusement un autre concept de programmation permet de pallier à ces deux soucis : il s'agit des effets de bord. Car, dans la mesure où les variables sont accessibles n'importe où dans rpg maker, il est tout à fait possible de définir les paramètres avant l'appel de l'event commun et de récupérer le résultat après. Voyons donc ce que ça donne :

V Implementation

Et voici sans attendre le code à mettre dans l'event commun :

EMG1 : pseudo-fonctions TutoPow2

Et le bout de code utilisant cet event :

EMG1 : pseudo-fonctions TutoPow3

Si vous êtes observateurs, vous remarquerez qu'il s'agit du même code que celui posté bien plus haut, mais séparé cette fois-ci en deux events. En gros ce qui se passe :

On donne aux variables 1 et 2 les valeurs du nombre et de la puissance, comme on aurait définit les paramètres de la fonction.
On appelle l'event commun pour exécuter son code et donc calculer la puissance
Le résultat est présent dans dans la variable 3, on n'a donc plus qu'à l'afficher Very Happy

On a alors un avantage à faire de cette manière car non seulement on n'a plus que 4 lignes à copier-coller à chaque affichage d'un nombre au lieu de tout le code. De plus, si jamais on décide de modifier le code de l'event commun, on n'a qu'à le faire une fois et chaque appel l'utilisant sera modifié en conséquence.

VI Conclusion
Voilà, c'était le premier tutoriel de la série. J'espère ne pas vous avoir trop donné mal à la tête Very Happy

Pour résumer ce qu'on a vu, c'est qu'il est possible de factoriser du code pour n'avoir à le définir qu'une fois pour toute et le réutiliser autant de fois qu'on le souhaite.

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.
Revenir en haut Aller en bas
garywiss6
Rétrograde Lv 54
Rétrograde Lv 54
garywiss6


Nombre de messages : 5302
Age : 29

EMG1 : pseudo-fonctions Empty
MessageSujet: Re: EMG1 : pseudo-fonctions   EMG1 : pseudo-fonctions Icon_minitimeVen 31 Mar 2017, 11:23

Très bon tuto d'introduction à l'utilité des évènements commun sur rm et aussi une bonne petite introduction à la factorisation et à la programmation.

C'est bizarre mais la façon dont on fait ces pseudo fonction me rappelle un peu​ l'assembleur

Et tout cas j'attends la suite avec impatience cactus smile

____________
Un soir banal sur skype a écrit:
Moi : C'était quoi ce cri ?
Choco : C'est ma saucisse qui a hurlé.
Revenir en haut Aller en bas
http://vuesubjective.org/Garywiss/
Invité
Invité
Anonymous



EMG1 : pseudo-fonctions Empty
MessageSujet: Re: EMG1 : pseudo-fonctions   EMG1 : pseudo-fonctions Icon_minitimeDim 02 Avr 2017, 20:17

Je vois que ce n'est pas le centre du tutoriel mais je me rends compte grâce à lui que je n'ai jamais utilisé les événements communs comme des "appels de fonction", du moins pas comme je le ferais en programmation "traditionnelle" alors que bon, c'est clairement prévu pour.

Un tuto qui peut s'avérer pratique pour les débutants comme les confirmés, merci =]
Revenir en haut Aller en bas
AlexRE
Admin trop trizo Lv 65
Admin trop trizo Lv 65
AlexRE


Nombre de messages : 29934
Age : 37

EMG1 : pseudo-fonctions Empty
MessageSujet: Re: EMG1 : pseudo-fonctions   EMG1 : pseudo-fonctions Icon_minitimeLun 03 Avr 2017, 00:33

Je me suis mis depuis quelques mois à utiliser des évènements communs comme fonctions en effet, avec des variables qui font office de paramètres et d'autres qui font office de valeur de retour.

Bref, très bonne pratique, en effet !!

Merci pour le tuto. cactus smile

____________
Relm a écrit:
Merci pour la confirmation Gary et fuck my life.
Revenir en haut Aller en bas
http://www.alexzone.net
Contenu sponsorisé





EMG1 : pseudo-fonctions Empty
MessageSujet: Re: EMG1 : pseudo-fonctions   EMG1 : pseudo-fonctions Icon_minitime

Revenir en haut Aller en bas
 
EMG1 : pseudo-fonctions
Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
E-magination :: ~ Forums d'enrichissement ~ :: Apprentissage et partage :: RPG Maker 2K & 2K3 :: Tutoriels-
Sauter vers: