Comprendre les Erreurs de Compilation

Comprendre les Erreurs de Compilation

> Tutoriel LeekScript

Vous codez votre IA comme un bienheureux. Les lignes défilent, et les noms de variables et de fonctions très logiques, tel sfatyu_2 s’enchaînent, la vie est belle... Soudain ! La touche "sauvegarder" est pressée et votre code est vérifié par le compilateur. Il soutient votre regard, intensément... Et la, c'est le drame ! Une (ou plusieurs !) grosse lignes rouges s'affichent en bas de votre éditeur, que peuvent bien signifier ces formules magiques étranges et ésotériques ?

Ce guide vous révélera la vérité pour que vous aussi, vous devienné des sacheurs.

Variable ou fonction inconnue

Qui est ce qui a oublié de déclarer sa variable ? Un petit retour au tutoriel sur Les Variables et le tutoriel sur Les Fonctions peut s’avérer utile.

!var ou func unknown

Ici, la variable enemy n'est pas déclarée. Il faut d'abord la créer avec le mot clef var. Correction : var enemy = getNearestEnemy();

Et pour celui la alors ? !ex unknown func

Et bien l'auteur n'est qu'un singe avec un clavier, et n'a pas vu qu'il a utilisé getNeerest (qui n'existe pas) au lieu de getNearest, déclarée juste au dessus.

Ce nom de variable est indisponible

On ne peut pas redéclaré une variable avec le même nom d'une variable déjà déclarée.

![](https://imgur.com/Qx5n006.png)

Correction (moche) : var moi2 = 1 Une meilleure correction serait d'utiliser des noms qui correspondent vraiment au rôle de vos variables .

Attention: Cette erreur peut aussi apparaître a cause du nom d'une variable globale.

Cette erreur vous tombera également dessus si vous utilisez une virgule a la place du vénéré point virgule : ![](https://imgur.com/cCpqtxS.png)

Correction : var enemy = getNearestEnemy();

Cela est due a la déclaration des variables en ligne : var variable1 = 1, variable2 = 2; est une syntaxe tout a fait valide (voir Les Variables).

Ce nom de fonction est indisponible

Comme l'erreur précédente, on ne peut pas réutiliser un nom de fonction déjà utilisé.

![](https://imgur.com/UUfrixR.png)

Correction (très moche) : function getNearest2() {

Impossible d'utiliser ce nom de paramètre

Alors on tente d'utiliser le nom d'une variable global comme nom de paramètre hein ? Vous savez ce que ça pourrait vous coûter si vous étiez tomber avec un de mes collègues moins sympa ?

![](https://imgur.com/xnAOUAV.png)

Correction :

Parenthèse fermante attendue

Comme le message d'erreur l'indique, il manque une parenthèse a la ligne indiquée. !wrong if

Ici, la ligne 19 du code devrait être if (not isAlive(enemy)) {

Une valeur était attendue ici

Un appel de fonction non refermé ?? Voila ce que vous récoltez ! !val attendue

Correction moveToward(enemy);

Nombre de paramètres incorrect

Des paramètres ? kezako ? Un petit retour sur le tutoriel Les Fonctions s'impose !

!nb param incorrect

Ici, la fonction moveToward accepte de 1 a 2 paramètres, et on lui en donne 0. Évidement le compilateur nous tape sur les doigts. Correction moveToward(enemy); ou moveToward(enemy, mp); avec mp un nombre.

Notez que vous obtiendrez la même erreur si vous donnez trop de paramètres a une fonction (Eg: moveToward(enemy, mp, truc);).

Tout les blocs n'ont pas été refermés

C'est quoi un bloc ? Et bien c'est une section de code entouré par des { }. Ici, on a ouvert un bloc avec { sans le refermer. !blocs pas refermes

Ici il manque le } après la fin du if. Le compilateur nous indique donc la fin du bloc actuel (ici la fin du fichier) pour indiquer qu'on oublié de fermer tous les blocs. Correction :

Aucun bloc a fermer

Cette situation est l'inverse de la précédente. On a fermé un bloc avec } sans l'ouvrir d'abord... !bloc a fermer

Correction : if (not isAlive(enemy)) {

Parenthèse ouvrante attendue

Refaites un tours vers le tutoriel sur Les Fonctions : même si on n'a pas de paramètre a passer a une fonction, il faut au moins mettre les parenthèses ().

![](https://imgur.com/oL6m1HB.png)

Correction : function getNearest() {

Un nom de paramètre était attendu

Comme précédemment, quand on déclare une fonction, il ne faut pas oublier de fermer les parenthèses avant le {.

!Nom de param était attendu

Correction : getNearest() {

Un while est attendu après un bloc do

Un petit tour sur le tutoriel sur Les Boucles ? Le do-while nécessite un while a la fin du bloc.

![](https://imgur.com/1om5UYF.png)

Correction : } while(true);

Comment ça personne n'utilise les do while ?

Une chaine de caractères est attendue...

en nom de variable

![](https://imgur.com/7rfsGlW.png)

après un mot clé global

![](https://imgur.com/QthQ6c8.png)

Dans ces deux cas, on a oublié de donner un nom a notre variable. Un petit tour sur le tutoriel Les Variables ne ferait pas de mal.

Correction : var maVariable = 1; global maVariable = "Variable";

Aucune condition pour ce else

Une condition else (ou else if) doit toujours être précédé d'une condition if (voir Les Conditions). On est des gens civilisés ici ! On n'utilise pas sinon sans scie, sinon on se fait taper sur les doigts.

![](https://imgur.com/9LNUZBy.png)

Correction:

L'expression n'est pas complète

Vous obtiendrez cette erreur quand vous ne respectez pas la syntaxe d'une expression particulière. Ici c'est un ternaire. Si vous ne connaissez pas les ternaires, c'est une notation du if {} else {} en une seule ligne (voir Les Conditions et les Opérations).

![](https://imgur.com/RnkP6s4.png)

Correction : (getAliveEnemies() > 0) ? getNearestEnemy() : getEnemies()[0];

Comment ça ce code ne sert a rien ? J'te permet pas ! Est ce que je critique ton code moi ?

Caractère invalide

Un point virgule on vous a dit ! Pas vraiment un point, pas vraiment une virgule, un peu des deux. L'erreur du caractère invalide vous tombera dessus comme la faim sur le pov' monde.

![](https://imgur.com/uvRfqax.png)

Correction : var enemy = getNearestEnemy();

Cet opérateur est inattendu ici

![](https://imgur.com/UNujtYc.png)

Inattendu ? Ça c'est clair ! Comment en êtes vous arrivé la ?? Il ne faut pas utiliser un opérateur (Les Opérateurs) comme une variable.

Impossible de déclarer une fonction ailleurs que dans le bloc principal

Le LeekScript ne permet de déclarer des fonctions que dans le bloc principal, impossible de déclarer une fonction dans un autre bloc.

![](https://imgur.com/QD5xbbA.png)

![](https://imgur.com/QaIR7tT.png)

Correction :

Il existe un cas particulier ou l'on peut déclarer une fonction dans une autre, passez voir le tutoriel sur Les Fonctions.

Vous ne pouvez déclarer une variable globale que dans le bloc principal

Comme précédent mais avec les variables globales ! Une variable globale ne peut pas être déclarée dans un autre bloc que le bloc principal. Pas dans un if, pas dans une boucle, pas dans une fonction, un point virgule c'est tout.

![](https://imgur.com/0hpZdUD.png)

Correction :

Impossible d’inclure une IA ailleurs que dans le bloc principal

Utiliser les include c'est bien, les utiliser correctement c'est mieux ! Ici, on essaye d'inclure une IA ailleurs que dans le bloc principal, et le compilateur nous observe avec des yeux qui font peur...

![](https://imgur.com/StZaz2d.png)

Correction :

Note : L'auteur dénigre toute responsabilité en cas de la non-victoire en utilisant l'IA de Pilow.

Le mot clé break ne peut être utilisé que dans une boucle

Cette erreur donne une très bonne description d'elle même : l'utilisation de break ne peut se faire que dans une boucle (voir Les Boucles)

![](https://imgur.com/uawRRfx.png)

Correction :

Remarque : Ce code donne exactement le même résultat qu'en utilisant un if, car la boucle est brisée au premier tour. Cependant c'est quand même ridicule non ?

Le mot clé continue ne peut être utilisé que dans une boucle

Exactement la même erreur que celle juste au dessus, mais vous utilisez le continue plutôt que break.

Note : Utilisez le code suivant pour faire pleurer des Pilow et réchauffer la salle serveur :

Impossible d'ajouter une instruction alors qu'il y a déjà un break, return ou continue dans le bloc actuel

Dans la catégorie du concours trés spécifique des erreurs de compilation trés longues et auto explicatives, voila le champion. Si vous avez cette erreur, c'est que vous avez une instruction placée dans un endroit de votre code qui ne sera jamais executé. En effet, dans l'exemple ci dessous, on a mis le debug après l'instruction break, qui nous sort directement de la boucle !

![](https://imgur.com/ZwbWH9l.png)

Correction :

Comme indiqué dans sa description, cette erreur peut également arriver avec un return ou un continue.

![](https://imgur.com/w6NjkLo.png)