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.