Night.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

417 connectés actuellement

30735032 visiteurs
depuis l'ouverture

1997 visiteurs
aujourd'hui



Barre de séparation

Partenaires

Indiexpo

Akademiya RPG Maker

Blog Alioune Fall

Fairy Tail Constellations

Zarok

ConsoleFun

Leo-Games

Kingdom Ultimate

RPG Fusion

Tous nos partenaires

Devenir
partenaire



[Ruby] Cours n°8 : Fonctions et procédures

Série de tutoriels sur le Ruby. On aborde ici les fonctions et procédures, qui permettent de gagner du temps dans l'élaboration de son code.

Ecrit par Tonyryu le 02/08/2013


❤ 0

Sommaire

Ruby
Les variables
Les tableaux
Les booléens et les calculs logiques
Structure de if
Structure de case
Boucles loop do et while
Boucle for
>> Fonctions et procédures <<
POO - Classes et objets

RGSS
Débuter avec le RGSS
Module Input
Bitmap, Color, Sprite
Structure de base des classes Scene et Window




[Ruby] Cours n°8 : Fonctions et procédures


Fonctions et procédures, derrière ces termes complètement abstraits se cache l'outil ultime pour faciliter la vie du développeur. Elles permettent d'isoler des traitements particuliers, mais aussi et surtout d'éviter de réécrire plusieur fois le même code de traitement.

Allé hop, on retourne dans le fond de ma cuisine pour vous montrer l'utilité, je veux boire un verre de jus d'orange par exemple, et je vais détailler l'action :

- ouvrir le placard
- prendre un verre
- fermer le placard
- ouvrir le réfrigérateur
- prendre la bouteille de jus d'orange
- fermer le réfrigérateur
- ouvrir la bouteille de jus d'orange
- verser du jus d'orange dans le verre
- fermer la bouteille de jus d'orange
- ouvrir le réfrigérateur
- ranger la bouteille de jus d'orange
- fermer le réfrigérateur
- boire le contenu du verre

cela fait quant même beaucoup d'action à réaliser, juste pour boire un verre de jus d'orange, c'est quant même plus simple de dire, ' je vais boire un verre de jus d'orange' que 'je vais ouvrir le placard, prendre un verre, fermer le placard, ouvrir le réfrigérateur, prendre la bouteille de jus d'orange, fermer le réfrigérateur, ouvrir la bouteille de jus d'orange, verser du jus d'orange dans le verre, fermer la bouteille de jus d'orange, ouvrir le réfrigérateur, prendre la bouteille de jus d'orange, fermer le réfrigérateur, boire le contenu du verre'.
Surtout, si j'aime bien boire du jus d'orange et que j'y retourne 5 fois dans la journée.

Dans un programme, c'est exactement pareil, un traitement peut être isolé dans une fonction ou une procèdure, pour permettre d'éclaircir le code et de pouvoir aussi l'utiliser à diférents endroits, effectivement, je peux très bien boire du jus d'orange ailleur que chez moi, bon certe, je vais pas aller me servir dans le réfrigérateur d'un restaurant, il faut aussi savoir qu'il ne faut pas utiliser un même traitement partout, il peut ne pas être forcément adapté.


Je vais modifier mon exemple pour le rendre plus concret du point de vu programmation, je vais donc calculer des surfaces et des périmètres de rectangle :

Citation:

Programme : Calcul_geometrique

Variables :
largeur est un entier
longueur est un entier
perimetre est un entier
surface est un entier


Début :
| largeur <- 5
| longueur <- 9
|
| perimetre <- (largeur * 2) + (longueur * 2)
| surface <- largeur * longueur
|
| afficher perimetre
| afficher surface
|
| largeur <- 3
| longueur <- 4
|
| perimetre <- (largeur * 2) + (longueur * 2)
| surface <- largeur * longueur
|
| afficher perimetre
| afficher surface
|
| largeur <- 2
| longueur <- 7
|
| perimetre <- (largeur * 2) + (longueur * 2)
| surface <- largeur * longueur
|
| afficher perimetre
| afficher surface
|
Fin



En regardant cet algorythme, on voit tout de suite qu'un bloc est répété plusieur fois à l'identique :

Citation:

| perimetre <- (largeur * 2) + (longueur * 2)
| surface <- largeur * longueur
|
| afficher perimetre
| afficher surface




On va donc en faire une procédure. Mais vous vous demandez pourquoi une procédure et pas une fonction, et quel en est la diférence?
La diférence est toute bête, la fonction renvoie une valeur, alors que la procédure ne le fait pas. On verra des exemples plus loin.

L'utilité d'une procédure ou d'une fonction, c'est que l'on peut lui passer des paramètres pour pouvoir effectuer des traitements sur des données qui peuvent changer. Dans notre cas, il s'agit de largeur et longueur, voici l'algorythme de la procédure 'calcul_geo_rectangle'.

Citation:

Procédure : calcul_geo_rectangle

Paramètres :
ENTREE : largeur est un entier
ENTREE : longueur est un entier

Variables :
perimetre est un entier
surface est un entier

Début :
| perimetre <- (largeur * 2) + (longueur * 2)
| surface <- largeur * longueur
|
| afficher perimetre
| afficher surface
Fin

________________________________________________

Programme : Calcul_geometrique

Variables :


Début :
| calcul_geo_rectangle(5,9)
|
| calcul_geo_rectangle(3,4)
|
| calcul_geo_rectangle(2,7)
Fin



Le programme principal à déjà une meilleure tête, non ?

Maintenant, la même chose en Ruby, sans définir de procédure :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
largeur = 5
longueur = 9
 
perimetre = (largeur * 2) + (longueur * 2)
surface = largeur * longueur
 
print perimetre
print surface
 
largeur = 3
longueur = 4
 
perimetre = (largeur * 2) + (longueur * 2)
surface = largeur * longueur
 
print perimetre
print surface
 
largeur = 2
longueur = 7
 
perimetre = (largeur * 2) + (longueur * 2)
surface = largeur * longueur
 
print perimetre
print surface 



avec la procédure :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def calcul_geo_rectangle(largeur,longueur)
  perimetre = (largeur * 2) + (longueur * 2)
  surface = largeur * longueur
 
  print perimetre
  print surface
end
 
 
begin
  calcul_geo_rectangle(5,9)
 
  calcul_geo_rectangle(3,4)
 
  calcul_geo_rectangle(2,7)
end 



Comme vous avez pu le comprendre l'opérateur 'def' en ruby, permet de définir une fonction ou une procédure. Les paramètres qui sont définits dans la ligne définition, récupére automatiquement les valeurs qui sont transmis lors de l'appel. Il est possible de définir des valeurs par défaut :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def calcul_geo_rectangle(largeur = 1,longueur = 1)
  perimetre = (largeur * 2) + (longueur * 2)
  surface = largeur * longueur
 
  print perimetre
  print surface
end
 
 
begin
  calcul_geo_rectangle(5,9)
 
  calcul_geo_rectangle(4)
 
  calcul_geo_rectangle
end 



Dans le deuxième appel, largeur prendra pour valeur : 4 et longueur : 1
Dans le troisième, largeur : 1 et longueur : 1

Attention, les valeurs par défaut doivent être définit, en commençant par la fin et doivent être contigues, voici des exemples de ce qu'il NE faut PAS faire :

def ma_procedure(param_A = 2, param_B, param_C)

def ma_procedure(param_A, param_B = 3, param_C)

def ma_procedure(param_A = 2, param_B, param_C = "12")


Maintenant, en ce qui concerne les fonctions, et bien c'est exactement la même chose ormis le fait que l'on revoie une valeur en utilisant l'opérateur 'return'. Un petit exemple rapide juste pour le périmètre.

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
def perimetre_rect(largeur = 1, longueur = 1)
  perimetre = (largeur * 2) + (longueur * 2)
  return perimetre
end
 
begin
  print (perimetre_rect(3, 5) + perimetre_rect(2, 2) ).to_s
end



Comprenez bien qu'un calcul fait avec une variable de retour d'une fonction est soumis au même règles de typage qu'une variable classique. Si votre fonction retourne une chaine et que vous tentez de faire une division dessus, il se produira une erreur. Soyez donc très vigilant.


Voilà, je pense que l'on a bien survolé les bases de la programmation structurelle, des choses on peut être été oublié, mais savoir rechercher une information est la compétence la plus importante d'un informaticien et donc d'un développeur. Il existe de nombreux site de référence proposant des guides des fonctions Ruby.


Source
- Tonyryu, "[Ruby] Cours n°8 : Fonctions et procédures ", TonyryuDev, écrit le 2 août 2013 [consulté le 4 juillet 2021], https://web.archive.org/web/20181201142716/http://www.tonyryudev.com/joomla3/index.php/menu-mes-developpements/menu-cours-ruby-rgss/9-ruby-cours-n-8-fonctions-et-procedures
Ce tutoriel a été posté avec l'accord de son auteur.


Aucun commentaire n'a été posté pour le moment.

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