Java Language Pitfall - Les points-virgules mal placés et les accolades manquantes


Exemple

C'est une erreur qui crée une véritable confusion pour les débutants de Java, du moins la première fois qu'ils le font. Au lieu d'écrire ceci:

if (feeling == HAPPY)
    System.out.println("Smile");
else
    System.out.println("Frown");

ils écrivent accidentellement ceci:

if (feeling == HAPPY);
    System.out.println("Smile");
else
    System.out.println("Frown");

et sont perplexes lorsque le compilateur Java leur dit que le else est mal placé. Le compilateur Java avec interpréter ce qui suit comme suit:

if (feeling == HAPPY)
    /*empty statement*/ ;
System.out.println("Smile");   // This is unconditional
else                           // This is misplaced.  A statement cannot
                               // start with 'else'
System.out.println("Frown");

Dans d'autres cas, il n'y aura pas d'erreurs de compilation, mais le code ne fera pas ce que le programmeur a l'intention de faire. Par exemple:

for (int i = 0; i < 5; i++);
    System.out.println("Hello");

n'imprime que "Hello" une fois. Encore une fois, le faux point-virgule signifie que le corps de la boucle for est une instruction vide. Cela signifie que l'appel println suivant est inconditionnel.

Une autre variante:

for (int i = 0; i < 5; i++);
    System.out.println("The number is " + i);

Cela donnera une erreur "Impossible de trouver le symbole" pour i . La présence du point-virgule erroné signifie que l'appel println tente d'utiliser i dehors de son champ d'application.

Dans ces exemples, il existe une solution simple: supprimez simplement le demi-point erroné. Cependant, il y a des leçons plus profondes à tirer de ces exemples:

  1. Le point-virgule en Java n'est pas un "bruit syntaxique". La présence ou l'absence d'un point-virgule peut changer le sens de votre programme. Ne vous contentez pas de les ajouter à la fin de chaque ligne.

  2. Ne faites pas confiance à l'indentation de votre code. En langage Java, le compilateur ignore les espaces blancs en début de ligne.

  3. Utilisez un pénétrateur automatique. Tous les IDE et de nombreux éditeurs de texte simples comprennent comment mettre correctement en retrait le code Java.

  4. C'est la leçon la plus importante. Suivez les dernières directives de style Java et placez des accolades autour des instructions "then" et "else" et de la déclaration de corps d'une boucle. L'attache ouverte ( { ) ne doit pas figurer sur une nouvelle ligne.

Si le programmeur suivait les règles de style, l'exemple if avec des points-virgules égarés ressemblerait à ceci:

if (feeling == HAPPY); {
    System.out.println("Smile");
} else {
    System.out.println("Frown");
}

Cela semble étrange à un œil expérimenté. Si vous indentez automatiquement ce code, cela ressemblera probablement à ceci:

if (feeling == HAPPY); {
                           System.out.println("Smile");
                       } else {
                           System.out.println("Frown");
                       }

qui devrait se démarquer même mal pour un débutant.