Использует ли блок while ничего плохого?

Полезный подход для сериализации экземпляров несериализуемых классов (или, по крайней мере, подклассов) известен Serial Proxy. По сути, вы выполняете writeReplace, чтобы возвращать экземпляр совершенно другого сериализуемого класса, который реализует readResolve для возврата копии исходного объекта. Я написал пример сериализации java.awt.BasicStroke в Usenet

24
задан inspite 15 January 2009 в 10:26
поделиться

12 ответов

Нисколько - я полагаю, что Вы найдете пустые циклы как они в K& R, таким образом, это почти так официально, как это добирается.

Это - вопрос персонального предпочтения, но я предпочитаю свои пустые циклы как это:

while(something());

Другие предпочитают, чтобы точка с запятой пошла на отдельную строку, укрепила то, что это - цикл:

while(something())
  ;

Все еще другие предпочитают использовать скобки ни с чем внутри, поскольку Вы сделали:

while(something())
{
}

Это все допустимо - необходимо будет просто выбрать стиль, который Вы любите и продолжаете работать с ним.

37
ответ дан Kyle Cronin 15 January 2009 в 10:26
поделиться
  • 1
    Я думаю, что это было сделано в пользу авиационной радиоэлектроники десятилетий назад, где Вы вставляете код четырех thumbwheels, которые непосредственно кодируют 12-разрядное значение в простую цифровую логику для последовательной передачи. Никакой микропроцессор не был включен, так как они didn' t имеют их (или didn' t хотят сложность в авиационном приложении). – greggo 7 December 2010 в 19:26

Ваш вопрос "Использует некоторое время блок, чтобы ничего не сделать плохая вещь?" может также быть отвечен с точки зрения траты циклов ЦП. В этом случае ответ является "Нет", с тех пор, процесс будет спать, в то время как это ожидает пользователя для ввода символа.

процесс проснется только после того, как символ вводится. Тогда тест произойдет и если тест передаст, т.е. c == '', то процесс заснет снова до вводится следующий символ. Это повторяется, пока непробел не вводится.

6
ответ дан jeffD 15 January 2009 в 10:26
поделиться

Я думаю, что это совершенно приемлемо.

я или записал бы его:

//skip all spaces
while ((c = getchar()) == ' ') {} 

для создания его очевидным, что эта строка кода делает одну вещь.

Или я записал бы его как это:

while ((c = getchar()) == ' ') {
    //no processing required for spaces
}

так, чтобы это соответствовало остальной части формата Вашего кода.

Лично, я не поклонник

while ((c = getchar()) == ' ');

формат. Я думаю, что это к легкому для пропуска точки с запятой.

4
ответ дан Chad DeShon 15 January 2009 в 10:26
поделиться
  • 1
    Это возвращается текущий , часовой пояс сместил . Не часовой пояс. Смещение может измениться, на основе вещей как летнее время. См. " Часовой пояс! = Offset" в wiki тега часового пояса – Matt Johnson 3 November 2016 в 16:56

Я одобрил бы:

while ((c = getchar()) == ' ') /* Eat spaces */;

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

, В то время как несуществующие тела циклов совершенно приемлемы, должно быть ОЧЕНЬ ясно, что это является намеренным.

1
ответ дан Paulpro 15 January 2009 в 10:26
поделиться

while, который ничего не делает, вероятно , плохая вещь:

while(!ready) {
   /* Wait for some other thread to set ready */
}

... действительно, действительно, дорогой способ ожидать - он будет использовать столько ЦП, сколько ОС даст его, столько, сколько ready является ложным, крадя процессорное время, с которым другой поток мог делать полезную работу.

Однако Ваш цикл не выполнение ничего:

while ((c = getchar()) == ' ')
    {};  // skip

..., потому что это звонит getchar() на каждом повторении. Следовательно, как все остальные согласились, что Вы сделали, прекрасен.

1
ответ дан slim 15 January 2009 в 10:26
поделиться
  • 1
    +1. Удостоверьтесь свой момент использования с датой для использования рычага tz. momentjs.com/timezone/docs к установленному это с node.js использует эту команду npm install moment-timezone, тогда потребовал его как это window.moment = require('moment-timezone'); – Junior 18 November 2017 в 21:42

Я не думаю без проблем в нем. Можно использовать его Во многих ситуациях, я предпочитаю его.

0
ответ дан Nakul Chaudhary 15 January 2009 в 10:26
поделиться
  • 1
    Часовой пояс взят от браузера или устройства? – bubble 20 June 2018 в 05:00

Канонический путь — используемый с незапамятного времени, взгляните, например, в Лионском книжном —

while(condition)       // Here's the whole thing
    ;                  // empty body.

На самом деле, в целом 'полуцвет на отдельной строке' соглашение используется для пустого оператора. Вы будете, например, иногда видеть

if( condition-1)
     ;
else if (condition-2)
     stmt;
else {
     // do stuff here
}

, Это намного более редко, но обнаруживается или где условие 1 очень сложно, таким образом, Вы не хотите инвертировать его и случайный беспорядок, или где код был оптимизирован рукой на волосок от его жизни, так, чтобы Вы хотели наиболее распространенный случай сначала.

while(condition) ;

формы нужно по-рабски избежать, потому что это - общая и раздражающая опечатка: необходимо прояснить, что Вы сделали это нарочно. Пустые фигурные скобки

 while(condition){
 }

или ее варианты, также проблема, потому что они или не выделяются достаточно, или худший вывод к другим опечаткам.

0
ответ дан Charlie Martin 15 January 2009 в 10:26
поделиться

Я не думаю, что процедура, но Ваше форматирование является довольно странным. Нет ничего неправильно с:

/* Eat spaces */
while ((c = getchar()) == ' ');

(то есть, укажите, что существует намеренно не тело)

2
ответ дан Dustin 15 January 2009 в 10:26
поделиться
  • 1
    Таким образом, как мы играем вокруг с ним с моментом? – user7344209 4 October 2018 в 03:57

Хорошо, если Вам действительно не нравятся пустые фигурные скобки, Вы могли бы осуществить рефакторинг тот внутренний цикл в

while (c == ' ') {c = getchar();}

, Это стоит одного дополнительного сравнения, хотя, таким образом, цикл с условием продолжения был бы лучше.

4
ответ дан Kyle Cronin 15 January 2009 в 10:26
поделиться
  • 1
    Этот doesn' t работа в Firefox, новая Дата () создает объект даты в часовом поясе UTC, таким образом, это бессмысленно к getTimezoneOffset () на нем – Krzysztof Krasoń 5 April 2018 в 09:08

Ну, не действительно, но это зависит от Вашей архитектуры.

if (dosomething()) { ; }

Вышеупомянутое собирается постоянно продвинуть и появиться от Вашего локального стека, который имеет память наверху. Кроме того, Вы будете также сбрасывать конвейеры своих процессоров с noop операциями.

0
ответ дан thesmart 15 January 2009 в 10:26
поделиться
  • 1
    @Milkncookiez, я обновил ответ.Спасибо. Никакая идея, как я инвертировал их (это мог бы быть случай работы обоих путей или быть измененным в некоторой предыдущей версии - вероятность того, что я отправлял что-то я haven' t протестированный близко к null). – Andrei Gheorghiu 22 November 2018 в 10:01

Я использовал код как это. Я не думаю, что существует действительно любая причина не использовать его, если ситуация гарантирует его.

0
ответ дан recursive 15 January 2009 в 10:26
поделиться
  • 1
    It' s действительно важный, который знают люди: это - корректный ответ. В настоящее время принимаемый ответ дает Вам СМЕЩЕНИЕ часового пояса (+/-INT значение), не часовой пояс (строка как " Америка Angeles" / Лос Angeles"). Они - два полностью различных понятия. – dudewad 15 January 2018 в 22:32

Альтернативная опция, которая еще не была упомянута:

while(condition)
    (void)0;

я действительно не предпочитаю писать моим циклам этот путь , но у меня был TA в прошлом семестре, кто сделал.

-1
ответ дан anon 15 January 2009 в 10:26
поделиться
  • 1
    Я сказал бы это " Неопределенный behavior" " bad" и должен избежаться, как Вы говорите. Но это также означает, что в некоторых случаях на самом деле пропустит память, и необходимо Всегда кодировать так, чтобы Вы решили худшие варианты. Это - мое мнение так или иначе. – Filip Ekberg 12 October 2009 в 08:46
Другие вопросы по тегам:

Похожие вопросы: