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.

Si vous souhaitez un robot pour automatiquement supprimer les insultes, n'hésitez pas à vous renseigner sur Mr. Robøt.

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
// client.on('message', (msg) => { // N'INTÉGREZ PAS CETTE LIGNE, ELLE EST DONNÉE POUR SE REPÉRER

function salut { // Déclaration de la fonction et "ouverture" de la zone de son code
    return msg.channel.send("Coucou !") // Envoi d'un message de réponse
} // "Fermeture" de la zone du code de la fonction

Ensuite, recopiez ce morceau de code à la place qu'on les messages habituellement :

message-fonction
if (msg.content.startsWith(prefix + "salut")) { // Détection du message
    salut(); // Demande d'éxécution de la fonction
} // Fin de la zone de code à exécuter si le message est détecté

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
function entierAleatoire() { // Déclaration de la fonction et "ouverture" de la zone de son code
    return Math.floor(Math.random() * (10 - 1)); // Retourne un chiffre aléatoire entre 1 et 10
} // "Fermeture" de la zone du code de la fonction

// client.on('message', (msg) => { // N'INTÉGREZ PAS CETTE LIGNE, ELLE EST DONNÉE POUR SE REPÉRER

Ajoutez aussi ce morceau de code comme un message :

message-fonction-aléatoire
if (msg.content.startsWith(prefix + "aleatoire")) { // Détection du message
    msg.channel.send(entierAleatoire()) // Demande d'éxécution de la fonction
} // Fin de la zone de code à exécuter si le message est détecté

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
function monMessage (message) { // Déclaration de la fonction et "ouverture" de la zone de son code
    return msg.channel.send(message) // Envoi d'un message de réponse en suivant ce qui est écrit dans les parenthèses
} // "Fermeture" de la zone du code de la fonction

Et ceci à la place de la commande "salut" :

message-fonction-complexe
if (msg.content.startsWith(prefix + "message")) { // Détection du message
    monMessage("Hey !"); // Demande d'éxécution de la fonction avec un argument précisé entre les parenthèses
} // Fin de la zone de code à exécuter si le message est détecté

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
function entierAleatoire(min, max) { // Déclaration de la fonction et "ouverture" de la zone de son code
    return Math.floor(Math.random() * (max - min + 1)) + min; // Retourne un entier aléatoire entre 1 et 10
} // "Fermeture" de la zone du code de la fonction

Et ceci à la place de la commande "message" :

aleatoire
if (msg.content.startsWith(prefix + "aleatoire")) { // Détection du message
    msg.channel.send(entierAleatoire(1, 10)); // Le bot va répondre par un entier aléatoire entre 1 et 10
} // Fin de la zone de code à exécuter si le message est détecté

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.

Last updated