Tous les programmeurs doivent, à un moment ou un autre
- en tous cas régulièrement -, revenir dans leur code
pour trouver la raison pour laquelle les choses ne fonctionnent
pas comme elles le devraient. Si certaines erreurs sont inévitables,
d'autres restent récurrentes alors qu'il est relativement
facile de les éviter, même sans grande habitude du
langage.
Nous allons donc ici tenter de résumer les erreurs les plus
courantes (et les plus importantes), celles qui, une fois débusquées,
tendent à désespérer celui qui les a commises...
1)
Majuscules et autres erreurs de syntaxe
Une erreur encore très courante chez les débutants
est d'oublier que Java est un langage sensible à la casse
(il tient compte de la différence entre une lettre majuscule
et la même en minuscule). Ainsi, il est possible d'avoir deux
variables différentes appellées variable
et Variable (même si cela
est très fortement déconseillé.
De même, les classes en Java commencent toujours par
une majuscule.
button main = new button();
provoquera une erreur de compilation. La forme correcte est:
Button main = new Button();
Une erreur de syntaxe évidente et pourtant elle aussi courante:
l'oubli ou le mauvais positionnement du point-virgule (;).
L'oubli du point-virgule à la fin d'une instruction n'est
pas en soit extrêmement grâve: le compilateur repère
l'erreur directement, ce qui facilite la correction.
En revanche, il peut arriver que l'on mettre un point-virgule là
où il n'en faut pas. Par exemple, en voulant convertir une
boucle do-while en boucle while, il se peut que l'on oublie d'effacer
le fameux caractère:
do
{
...instructions...
}
while ( condition );
...donnerait...
while ( condition );
{
...instructions...
}
La position du point-virgule a pour effet de donner une boucle
while "vide", suivi d'un bloc d'instructions qui ne sera
exécuté qu'une seule fois. Par ailleurs, il est probable
que la boucle sera infinie, étant donné que le code
qui devra rendre la condition fausse ne sera pas exécuté
correctement...
Enfin, dernière cruelle évidence: ne jamais
oublier de fermer les paranthèses(()),
crochets ([]), accolades ({}),
guillemets ("") ou apostrophes
('') ouverts. Par exemple, oublier
de fermer une parenthèse vous donnera une longue liste d'erreurs
à la compilation. Autant s'éviter une telle frustration
et perte de temps en prenant l'habitude de toujours commencer par
ouvrir puis fermer ses parenthèses (ou ses crochets, ou ses
accolades, ...), puis d'y écrire le contenu.
2)
Utilisation de ==
Passons sur le fait de ne pas confondre "="
avec "=="...
Une erreur très courante est de chercher à comparer
deux chaînes à l'aide de l'opérateur ==.
Il s'agit ici d'un problème de sémantique: les chaînes
en Java étant des objets de la classe java.lang.String,
cet opérateur appliqué à des objets ne fait
que tester l'égalité des référénces
des variables, et non celles de leurs contenus.
String chaine1 = "coucou";
String chaine2 = "cou";
Boolean test;
chaine2 = chaine2 + chaine2;
test = ( chaine1 == chaine2 ); // test renvoi "false"
Pour tester l'égalité de deux chaînes de caractères, il faut utiliser
la méthode equals() de l'objet String:
test = chaine1.equals(chaine2);
// test renvoi "true"
C'est une erreur subtile parce que le code se compile sans problème
(le code est légal), mais ne fait pas du tout ce que l'on
souhaite...
Dans le même ordre d'idées (mais provoquant cette fois
une erreur de compilation), il ne faut pas utiliser les opérateurs
> ou <=
pour comparer deux chaînes, mais faire appel à la méthode
compareTo() de l'objet String.
L'ensemble des méthodes de String est expliqué sur
le site de Sun.
3) Eviter les boucles infinies
Oubli simple mais très efficace dès qu'il s'agit de
geler une application: faire évoluer la condition d'une boucle
afin de la rendre fausse au bout d'un certain temps.
while(x<21)
{
g.drawString(x,10,y);
y+=20;
}
...se compile sans problème, mais parce qu'on a oublié
d'introduire l'indispensable incrémentation de la valeur
testée x, la condition serait
toujours vraie et la boucle sera infinie...
4) Utilisation des fichiers
Deux règles de base: un fichier doit contenir une et une
seule classe publique, et de fait, le nom du fichier doit être
de la forme nomDeLaClasse.java.
Si l'on place plusieurs classes dans un fichier, ou si le fichier
n'est pas nommé exactement comme la classe qu'il contient,
le compilateur affichera un message d'erreur...
5) Commentaires
On le répète encore et toujours, souvent en vain:
l'utilisation de commentaires est une part essentielle du processus
de programmation. Il ne faut pas partir du principe que "si
le code a été difficile à écrire, il
devrait être difficile à comprendre": en expliquant
votre code en langage naturel (= compréhensible pour les
autres programmeurs), vous ne faites pas qu'aider d'autres personnes
à comprendre et modifier/réutiliser votre code, vous
vous aidez aussi vous-même quand dans six mois, le manager
vous demandera de modifier une fonction ou d'en ajouter de nouvelles.
L'indentation fait aussi partie de la bonne manière d'écrire
un programme.
Même si un programme doit être rendu pour le lendemain
et que vous pensez devoir y passer la nuit, il ne faut pas pour
autant mettre de coté les commentaires pour y revenir plus
tard: le fait de passer des journées entières sur
du code laisse croire que l'on connait tous ces travers par coeur,
mais lorsque viendra l'heure d'écrire ces commentaires, qui
sait si vous n'aurez pas déjà perdu l'aisance que
vous aviez lors de l'écriture du code ?
Ajoutons que les JavaDoc
permettent de générer automatiquement une documentation
au format HTML à partir des commentaires placés dans
votre code source: il est donc de bon usage de commencer dès
maintenant à écrire ses commentaires dans
le bon format.
Page 1 | 2
|