Les fonctions - créer tes propres commandes
Regrouper plusieurs lignes de code sous un nom, avec ou sans paramètres, pour ne plus jamais te répéter
§1.Tu as déjà utilisé des fonctions
avancer(50), tourner_droite(90), couleur("red") — toutes ces commandes que tu utilises depuis le début sont en réalité des FONCTIONS. Quelqu'un les a écrites pour toi : du code derrière qui fait le travail compliqué (calcul d'angle, dessin sur le canvas), exposé sous un nom simple avec des paramètres entre parenthèses.
Maintenant tu vas apprendre à créer TES propres fonctions. C'est probablement le concept le plus puissant que tu vas apprendre. Une fonction, c'est une façon de donner un NOM à une suite d'instructions, puis de la réutiliser autant de fois que tu veux.
Quand un programmeur expérimenté écrit du code, il passe son temps à créer des fonctions. C'est ce qui distingue un débutant qui copie-colle d'un développeur qui structure.
// Définition de la fonction (elle ne fait rien encore)function carre() { for (let i = 0; i < 4; i++) { avancer(50) tourner_droite(90) }} // Appel : on l'utilise comme une commandecarre()tourner_droite(45)carre()tourner_droite(45)carre()On a écrit le code du carré UNE seule fois. Ensuite on l'appelle 3 fois. Sans la fonction, ce serait 12 lignes au lieu de 3.
§3.Anatomie d'une fonction
- function nom() { ... }
- Le mot-clé function, le nom de ton choix, des parenthèses vides (pour l'instant), puis le bloc { ... } avec le code à exécuter.
- Appel : nom()
- Pour exécuter une fonction, tu écris son nom suivi des parenthèses. Pas de mot-clé spécial.
- Définir vs appeler
- Définir la fonction (avec function), c'est juste écrire le mode d'emploi : rien ne se passe. C'est l'APPEL qui exécute le code.
§4.Les paramètres : personnaliser chaque appel
Une fonction sans paramètre fait toujours exactement la même chose. Pour la rendre vraiment utile, on lui donne des PARAMÈTRES : des valeurs qu'on passe entre les parenthèses, et que la fonction utilise à l'intérieur.
function carre(taille) { for (let i = 0; i < 4; i++) { avancer(taille) tourner_droite(90) }} carre(30)carre(60)carre(120)Le paramètre taille est une variable spéciale qui prend la valeur passée à l'appel. À l'intérieur de la fonction, on l'utilise comme n'importe quelle variable.
function polygone(cotes, taille, couleurTrait) { couleur(couleurTrait) for (let i = 0; i < cotes; i++) { avancer(taille) tourner_droite(360 / cotes) }} polygone(3, 80, "red") // triangle rougepolygone(6, 60, "blue") // hexagone bleupolygone(12, 40, "green") // dodécagone vertSépare les paramètres par des virgules dans la définition ET dans l'appel. L'ORDRE compte : ici cotes en premier, puis taille, puis couleur. Tu dois respecter cet ordre à chaque appel.
§8.Le mot-clé return
Jusqu'ici nos fonctions font des choses (dessiner). Mais une fonction peut aussi CALCULER une valeur et la renvoyer à celui qui l'a appelée. C'est le rôle du mot-clé return.
Sans return, la fonction fait son travail puis se termine — pas de valeur renvoyée. Avec return, elle « donne » une valeur que tu peux mettre dans une variable ou utiliser dans une expression.
// Calcule l'angle intérieur d'un polygone régulier à N côtésfunction angleInterieur(cotes) { return 180 * (cotes - 2) / cotes} const a3 = angleInterieur(3) // a3 vaut 60 (triangle équilatéral)const a4 = angleInterieur(4) // a4 vaut 90 (carré)const a5 = angleInterieur(5) // a5 vaut 108 (pentagone)La fonction reçoit un nombre de côtés et renvoie l'angle. Le mot-clé return termine la fonction et donne la valeur calculée.
function carre(t) { for (let i = 0; i < 4; i++) { avancer(t) tourner_droite(90) }} function dessinerTroisCarres(taille) { for (let i = 0; i < 3; i++) { carre(taille) lever_stylo() avancer(taille + 20) baisser_stylo() }} dessinerTroisCarres(40)Une fonction peut appeler d'autres fonctions. C'est exactement comme ça qu'on construit des programmes complexes : par composition.
§11.Bonnes pratiques
- Un nom qui décrit ce que fait la fonction
- dessinerEtoile() est bon. truc() est nul. Si tu choisis bien le nom, on comprend ton code sans commentaire.
- Une fonction = une seule responsabilité
- Évite les fonctions de 50 lignes qui font 10 choses. Découpe-les en plusieurs petites fonctions, chacune avec un rôle clair.
- Réutilise tes fonctions
- Si tu écris deux fois le même bloc de code, c'est probablement le signe qu'il faut une fonction. Principe DRY : Don't Repeat Yourself.
function test() { let x = 100 // x existe seulement DANS test avancer(x)} test()// Ici, x n'existe pas. La ligne suivante donnerait une erreur :// avancer(x) ← Erreur : x is not definedÀ retenir
- Une fonction = un nom + un bloc de code à exécuter.
- function nom() { ... } pour définir, nom() pour appeler.
- Les paramètres rendent la fonction réutilisable avec des valeurs différentes.
- return renvoie une valeur calculée à l'appelant.
- Une variable let dans une fonction n'existe pas en dehors (scope).
- Si tu copies-colles 2 fois le même code, crée une fonction (DRY).