Qu’est-ce qu’une fonction, pourquoi les utiliser

L’informatique a été inventée pour permettre l’automatisation des tâches répétitives. Rappelons que le métier àtisser, avec gestes cadencés, est une de ses origines.
C’est dans cette logique qu’ont été inventées les fonctions, qui permettent de regrouper des instructions, de donner un nom àcet ensemble et ensuite d’exécuter ce code, juste en l’appelant par son nom.

Précédent | 4/15 | Suivant

Appelée parfois sous-routine, une fonction est un outil puissant pour réduire la longueur d’un script. Il a aussi un autre rôle : celui de le rendre plus lisible pour les humains.

Ecrire une fonction

Commençons avec un script dessinant une étoile :

void setup(){
  size(600,200);
}

void draw(){
  background(0);
  
  // configurer x et y
  float x=200;
  float y=100;
  
  // dessiner des lignes
  stroke(255,255,0);
  line(x-5,y-5,x+5,y+5);
  line(x-10,y,x+10,y);
  line(x-5,y+5,x+5,y-5);
  line(x,y-10,x,y+10);
  
  // le nom de l'étoile
  text("Uranus", x +20,y+5);
  
  // stopper ici
  noLoop();
}
}

Si je veux placer une deuxième étoile, je vais devoir répéter ce code une deuxième fois àpar quelques détails.
Ça marchera, bien sà»r, mais si on doit en faire 5, on va rapidement avoir un code assez long et laborieux àécrire et àrelire.
Il y a mieux que ça : on va écrire une fonction et la réemployer autant de fois que nécessaire.

Pour créer une fonction, on choisit un nom. N’importe lequel, pourvu qu’il n’existe pas déjàdans le script et dans Processing. Pas de carctère spéciaux, pas d’espace, et on ne commence pas par un chiffre.
Dans notre cas, "etoile" est parfait.
Voici le code de notre fonction :

  void etoile(float x, float y, String texte) {
  // dessiner des lignes
  stroke(255, 255, 0);
  line(x-5, y-5, x+5, y+5);
  line(x-10, y, x+10, y);
  line(x-5, y+5, x+5, y-5);
  line(x, y-10, x, y+10);

  // le nom de l'étoile
  text(texte, x +20, y+5);
}

La fonction commence par "void", comme pour setup() et draw(). Et oui, setup() et draw sont des fonctions. "void" signifie que la fonction, une fois exécutée, ne renverra pas d’information. On verra plus tard ce que ça signifie.

Dans les parenthèses de la fonction on trouve des arguments, c’est àdire une information qu’on communique àla fonction quand on l’appelle. On le fiat si c’est nécessaire, setup() et draw() par exemple n’en ont pas.
Dans notre cas, on passe trois informations : x, y, et le texte àafficher. Il faut pour chacun des arguments, dire de quel type de variable il s’agit.

Voyons maintenant comment appeler cette fonction :

void setup() {
  size(600, 200);
}

void draw() {
  background(0);
  // appel des fonctions
  etoile(500, 100,"Uranus");
  etoile(200, 150,"Mars");

  // stopper ici
  noLoop();
}

// la fonction etoile()
void etoile(float x, float y, String texte) {
  // dessiner des lignes
  stroke(255, 255, 0);
  line(x-5, y-5, x+5, y+5);
  line(x-10, y, x+10, y);
  line(x-5, y+5, x+5, y-5);
  line(x, y-10, x, y+10);

  // le nom de l'étoile
  text(texte, x +20, y+5);
}

On obtiens un code bien plus court, qui fait exactement la même chose que le précédent. Mais maintenant que l’on affiche 5 étoiles, le gain devient vraiment intéressant.

L’appel de la fonction doit respecter l’ordre dans lequel les informations doivent être reçues, comme le montre le dessin ci-dessous.
Une fois les arguments reçus, ils peuvent être utilisés avec les noms de variables dans lesquels ils sont stockés : dans notre cas x, y et texte.

Une version àcinq étoiles.