В учебнике, который я просматривал, указано, что оператор может быть пустым (нулевой оператор). Пустое выражение определяется как точка с запятой.
Это абсолютно ничего не делает во время выполнения. Пустое выражение используется редко.
Как умеренно опытный программист, я нахожу интересным, что они говорят, что редко используются, это означает, что где-то есть применение для этого.
Какая польза от такого заявления?
Вы можете использовать его, когда оператор синтаксически требуется, но семантически не требуется. Наиболее распространенным случаем является исключение одной из частей цикла for, как в этом примере , хотя большинство людей считают такое использование странным и трудным для чтения. Как говорится в вашей книге, она редко используется.
источник
while ( sleepPoll(device, 1000, TimeUnit.MILLISECONDS) ) { ; }
все, конечно, на отдельных строках. Я мог бы написать это какwhile ( true ) { if ( ! sleepPoll(device, 1000, TimeUnit.MILLISECONDS) ) { break; } }
, но это было бы неправильно.void method(){ //code here. If(condition){return ;}}
,Я предпочитаю использовать цикл while , но нулевое выражение позволяет вам написать это:
Тем не менее, нулевое утверждение позволяет вам написать это:
Основная цель которого - напрасно тратить время на плохого программиста по обслуживанию, который приходит за вами и задается вопросом, почему поток не работает. Заявление должно следовать некоторое время. Один ; это утверждение. Так что этот блок операторов на самом деле не является частью цикла.
Это не значит, что нет хорошего применения. Они просто редки. Они обычно выглядят так:
Потому что таким образом это больше похоже на то, что вы хотите сделать (даже этого иногда недостаточно).
В сборке это нулевое утверждение называется NOP . В Python это называется проход . В Java (и других детей в) это точка с запятой, как вы сказали, или даже утверждение «истина»;
Я знаю несколько вариантов использования:
семантический .
Существует разница между пустым пространством и положением нуля в качестве ответа. Там ясно сказано: нет, я не забыла положить что-то здесь. Это ничто не должно быть ничем. Это явно ничего. Это пространство намеренно оставлено пустым. Вот как мы получаем N / A для компиляции.
Нулевой паттерн
Представьте себе сложный и дорогой световой сигнализатор, который неоднократно поднимал цветную лампочку с конвейерной ленты, ввинчивал ее в розетку, включал ее, снимал и брал следующую. Вы можете контролировать, что эта вещь сигнализирует по цвету лампочек, которые вы надеваете на ремень. Отлично, теперь, когда он наконец-то работает безупречно, ваш начальник хочет, чтобы вы создали способ контролировать синхронизацию этих сигналов. Он хочет добавить разрыв между сообщениями. Вы с ужасом помните, что многие части заботятся о времени этих сигналов и о том, как больно было синхронизировать их. Как вы собираетесь контролировать время, не позволяя вам работать на выходных? Вы смотрите на мусорное ведро сгоревших лампочек и получаете, ну, не в буквальном смысле, блестящую идею.
Иногда вы хотите использовать полиморфизм, чтобы просто что-то отключить, не нарушая ничего.
Отладка
Когда вы устанавливаете точку останова, вам должно быть место для нее. Теперь убедитесь, что некоторые отладчики позволят вам установить его на закрывающую фигурную скобку, но если они этого не делают, то приятно, что язык позволяет вам найти место для его размещения, даже если это место ничего не делает.
Не совсем Java, но есть также:
Бинарная игра
Инструкция NOP сборки позволяет возиться с скомпилированным двоичным исполняемым файлом. Но современные Java-компиляторы так много оптимизируют, что я не уверен, что точка с запятой не просто испортилась. Но в старые времена мы также использовали эти пустые места в исполняемом файле для контроля времени или для того, чтобы позже мы могли подключиться. Без NOP там были бы реальные инструкции, поэтому, если вы хотите подключить, вам придется скопировать эти инструкции в другое место, чтобы освободить место для подключения. Это работает так же хорошо в языке c, из которого Java получает большую часть своего синтаксиса. Но я не думаю, что эта зацепка часто происходит в Java. Мы используем Аспектно-ориентированное программирование, чтобы сделать это.
источник
for
не нулевыми утверждениями. Пустые операторы (или пустые операторы) могут появляться в том же месте, где могут встречаться другие операторы (например, anif
), но следующие в скобкахfor
запрещают операторы между точками с запятой, а только инициализатор и два выражения, которые являются необязательными. Таким образом, точка с запятой используется иначе, чем в качестве разделителя символов. Пустое утверждение будет последней точкой с запятой вfor(;;);
Я использую его, потому что Java разработан таким образом, который не соответствует человеческому языку. То же самое относится и к C.
Заявление
statement;
.Оператор if-then-else является
if (condition) statement; else statement;
Оператор if-then-else с составными блоками
if (condition) {statements} else {statements}
Это явно глупость.
Я соответственно пишу
if (condition) {statements} else {statements};
что логично и разумно.Если дизайнеры Java хотят рассматривать это как if-then-else с последующим нулевым оператором, я в порядке. Если это делает их счастливыми, пусть это делает их счастливыми.
источник
if (condition) {statements;} else {statements;}
. Кроме того, Java довольно последовательна в том, что не нужно;
s после}
. Вроде того, как человеческие языки не часто ставят точку в конце предложения, которое уже заканчивается знаком вопроса. (Конечно, есть!?
или?!
окончания, но это только приближения‽
, символ