Looking for java Keywords? Try Ask4Keywords

Java Language Pitfall - Пункты с запятой и отсутствующие фигурные скобки


пример

Это ошибка, которая вызывает реальную путаницу для начинающих Java, по крайней мере, в первый раз, когда они это делают. Вместо того, чтобы писать это:

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

они случайно пишут это:

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

и недоумевают, когда компилятор Java сообщает им, что else неуместно. Компилятор Java с интерпретированием выше:

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");

В других случаях ошибки компиляции не будут, но код не будет делать то, что намеревается программист. Например:

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

только печатает «Привет» один раз. Опять же паразитная точка с запятой означает, что тело цикла for представляет собой пустой оператор. Это означает, что следующий вызов println является безусловным.

Другой вариант:

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

Это даст ошибку «Не могу найти символ» для i . Наличие ложной точки с запятой означает, что вызов println пытается использовать i вне его области видимости.

В этих примерах есть прямолинейное решение: просто удалите ложную точку с запятой. Однако из этих примеров можно извлечь более глубокие уроки:

  1. Точка с запятой в Java не является «синтаксическим шумом». Наличие или отсутствие точки с запятой может изменить смысл вашей программы. Не добавляйте их в конце каждой строки.

  2. Не доверяйте отступу вашего кода. В языке Java лишние пробелы в начале строки игнорируются компилятором.

  3. Используйте автоматический индентор. Все IDE и многие простые текстовые редакторы понимают, как правильно отступать код Java.

  4. Это самый важный урок. Следуйте последним рекомендациям стиля Java и поместите фигурные скобки вокруг операторов «then» и «else» и оператора body цикла. Открытая скобка ( { ) не должна быть на новой строке.

Если программист следовал правилам стиля, то пример if с неуместными точками с запятой выглядел бы так:

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

Это выглядит странно для опытного глаза. Если вы автоматически отступом этот код, он, вероятно, будет выглядеть так:

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

который должен выделиться как неудачный даже для новичков.