Chapitre 3 - Les fonctions et les boucles
Dans ce chapitre, nous allons voir ce que sont les fonctions et les boucles et leur intérêt.

MESSAGE IMPORTANT.

Cette documentation n'est plus à jour depuis trop longtemps. Si vous voulez de l'aide, veuillez rejoindre ce serveur Discord et lire cet article qui date de Septembre 2021 mais qui est fréquemment mis à jour.

Les fonctions

On va commencer par le début.

Introduction

C'est quoi les fonctions ?

Les fonctions, c'est une fonctionnalité du JavaScript pour éviter les répétitions dans votre code et l'organiser.

Dans quel cadre ça pourrait m'être utile ?

Imaginez, par exemple, que vous souhaitez intégrer des commandes "8ball" (répond par oui ou non aléatoirement) et un "pierre-feuille-ciseaux". Pour ces deux commandes, il est fort probable que vous allez utiliser l'aléatoire dans votre commande. Au lieu de répéter deux fois les quelques ligne de code pour déterminer un chiffre aléatoire, nous allons créer une fonction pour que vous n'ayez qu'à répéter l'instruction qu'une seule fois.
Vous n'avez pas compris ? C'est pas grave, j'explique très mal, je vais vous montrer un exemple.

Les fonctions "basiques"

Introduction

Vers le début de votre code, juste après la ligne pour indiquer la "partie messages", insérez ceci :
fonction-basique
1
// client.on('message', (msg) => { // N'INTÉGREZ PAS CETTE LIGNE, ELLE EST DONNÉE POUR SE REPÉRER
2
3
function salut { // Déclaration de la fonction et "ouverture" de la zone de son code
4
return msg.channel.send("Coucou !") // Envoi d'un message de réponse
5
} // "Fermeture" de la zone du code de la fonction
Copied!
Ensuite, recopiez ce morceau de code à la place qu'on les messages habituellement :
message-fonction
1
if (msg.content.startsWith(prefix + "salut")) { // Détection du message
2
salut(); // Demande d'éxécution de la fonction
3
} // Fin de la zone de code à exécuter si le message est détecté
Copied!
Allumez le robot et tapez la commande "salut". Vous obtiendrez le résultat suivant :
Le robot a exécuté le code de la fonction. On dit que vous l'avez appelée. L'instruction "return" placée dans la fonction force l'arrêt de l’exécution de la fonction et retourne ce qui est spécifié dans la même ligne. Si il n'y a rien plus, la fonction sera stoppée sans rien de plus.
C'est plus clair tout d'un coup, pas vrai ? On vient de voir un cas de fonction qui est inutile, c'est vrai. Passons à quelque chose qui peut vraiment servir.

Les fonctions utiles

Ajoutez ceci à votre code, cette fois-ci avant la ligne pour indiquer la "partie messages" cette fois-ci :
fonction-aléatoire
1
function entierAleatoire() { // Déclaration de la fonction et "ouverture" de la zone de son code
2
return Math.floor(Math.random() * (10 - 1)); // Retourne un chiffre aléatoire entre 1 et 10
3
} // "Fermeture" de la zone du code de la fonction
4
5
// client.on('message', (msg) => { // N'INTÉGREZ PAS CETTE LIGNE, ELLE EST DONNÉE POUR SE REPÉRER
Copied!
Ajoutez aussi ce morceau de code comme un message :
message-fonction-aléatoire
1
if (msg.content.startsWith(prefix + "aleatoire")) { // Détection du message
2
msg.channel.send(entierAleatoire()) // Demande d'éxécution de la fonction
3
} // Fin de la zone de code à exécuter si le message est détecté
Copied!
Allumez votre robot est testez la commande "aleatoire". Vous obtiendrez le résultat suivant :
Vous pouvez tester plusieurs fois, la commande renverra toujours un chiffre compris entre 1 et 10.
Avec ses commandes, vous pouvez imaginer des commandes "pierre-feuille-ciseaux" ou "8ball" (ne vous inquiétez pas, nous parlerons bientôt des commandes "fun") !

Les fonctions "complexes"

On s'attaque à quelque chose d'un peu plus difficile.

Introduction

Ajoutez ceci à votre code à la place de la fonction "salut" :
fonction-complexe
1
function monMessage (message) { // Déclaration de la fonction et "ouverture" de la zone de son code
2
return msg.channel.send(message) // Envoi d'un message de réponse en suivant ce qui est écrit dans les parenthèses
3
} // "Fermeture" de la zone du code de la fonction
Copied!
Et ceci à la place de la commande "salut" :
message-fonction-complexe
1
if (msg.content.startsWith(prefix + "message")) { // Détection du message
2
monMessage("Hey !"); // Demande d'éxécution de la fonction avec un argument précisé entre les parenthèses
3
} // Fin de la zone de code à exécuter si le message est détecté
Copied!
Redémarrez votre robot et testez la commande "message". Vous obtiendrez le résultat suivant :
Le bot a répondu par ce qu'il y avait entre les parenthèses de la fonction car, dans la première ligne du code de cette section, nous avons déclaré l'argument "message", et que nous l'avons réutilisé à l'intérieur des parenthèses de la deuxième ligne du premier code de la section. Vous avez compris ?
L'argument ne doit pas forcément s'appeler "message" parce qu'il va servir à envoyer un message, vous pouvez le nommer comme vous le voulez, mais respectez bien la convention camelCase et choisissez un nom pertinent !

Les fonctions "complexes" utiles

On va faire quelque chose d'utile maintenant. Recopiez ceci à la place du code de la fonction "entierAleatoire"
fonction-complexe-utile
1
function entierAleatoire(min, max) { // Déclaration de la fonction et "ouverture" de la zone de son code
2
return Math.floor(Math.random() * (max - min + 1)) + min; // Retourne un entier aléatoire entre 1 et 10
3
} // "Fermeture" de la zone du code de la fonction
Copied!
Et ceci à la place de la commande "message" :
aleatoire
1
if (msg.content.startsWith(prefix + "aleatoire")) { // Détection du message
2
msg.channel.send(entierAleatoire(1, 10)); // Le bot va répondre par un entier aléatoire entre 1 et 10
3
} // Fin de la zone de code à exécuter si le message est détecté
Copied!
Testez cette commande. Vous obtiendrez le résultat suivant :
Encore une fois, vous pouvez tester autant que vous le voulez, la commande renverra toujours un chiffre compris entre 1 et 10.
Voilà, on a fait le tour des fonctions ! Bien sûr, il y a des "types" de fonctions encore plus complexes, qui parlent notamment des objets et de la POO (Programmation Orientée Objets), mais c'est encore un peu tôt pour en parler. Maintenant, on va passer aux boucles !
Le contenu de cette page n'est pas terminé intégralement. Il sera fini prochainement.