Полезный подход для сериализации экземпляров несериализуемых классов (или, по крайней мере, подклассов) известен Serial Proxy. По сути, вы выполняете writeReplace, чтобы возвращать экземпляр совершенно другого сериализуемого класса, который реализует readResolve для возврата копии исходного объекта. Я написал пример сериализации java.awt.BasicStroke в Usenet
Нисколько - я полагаю, что Вы найдете пустые циклы как они в K& R, таким образом, это почти так официально, как это добирается.
Это - вопрос персонального предпочтения, но я предпочитаю свои пустые циклы как это:
while(something());
Другие предпочитают, чтобы точка с запятой пошла на отдельную строку, укрепила то, что это - цикл:
while(something())
;
Все еще другие предпочитают использовать скобки ни с чем внутри, поскольку Вы сделали:
while(something())
{
}
Это все допустимо - необходимо будет просто выбрать стиль, который Вы любите и продолжаете работать с ним.
Ваш вопрос "Использует некоторое время блок, чтобы ничего не сделать плохая вещь?" может также быть отвечен с точки зрения траты циклов ЦП. В этом случае ответ является "Нет", с тех пор, процесс будет спать, в то время как это ожидает пользователя для ввода символа.
процесс проснется только после того, как символ вводится. Тогда тест произойдет и если тест передаст, т.е. c == '', то процесс заснет снова до вводится следующий символ. Это повторяется, пока непробел не вводится.
Я думаю, что это совершенно приемлемо.
я или записал бы его:
//skip all spaces
while ((c = getchar()) == ' ') {}
для создания его очевидным, что эта строка кода делает одну вещь.
Или я записал бы его как это:
while ((c = getchar()) == ' ') {
//no processing required for spaces
}
так, чтобы это соответствовало остальной части формата Вашего кода.
Лично, я не поклонник
while ((c = getchar()) == ' ');
формат. Я думаю, что это к легкому для пропуска точки с запятой.
Я одобрил бы:
while ((c = getchar()) == ' ') /* Eat spaces */;
у меня, как также было известно, была процедура под названием DoNothing специально для вызова в случаях как это. Это делает его очень ясным, что Вы действительно означаете ничего не делать.
, В то время как несуществующие тела циклов совершенно приемлемы, должно быть ОЧЕНЬ ясно, что это является намеренным.
momet-timezone
версия 0.5.4 или выше..., следуйте за этим потоком для дальнейших объяснений github.com/moment/moment-timezone/issues/324
– ymz
5 September 2017 в 09:48
while
, который ничего не делает, вероятно , плохая вещь:
while(!ready) {
/* Wait for some other thread to set ready */
}
... действительно, действительно, дорогой способ ожидать - он будет использовать столько ЦП, сколько ОС даст его, столько, сколько ready
является ложным, крадя процессорное время, с которым другой поток мог делать полезную работу.
Однако Ваш цикл не выполнение ничего:
while ((c = getchar()) == ' ')
{}; // skip
..., потому что это звонит getchar()
на каждом повторении. Следовательно, как все остальные согласились, что Вы сделали, прекрасен.
npm install moment-timezone
, тогда потребовал его как это window.moment = require('moment-timezone');
– Junior
18 November 2017 в 21:42
Я не думаю без проблем в нем. Можно использовать его Во многих ситуациях, я предпочитаю его.
Канонический путь — используемый с незапамятного времени, взгляните, например, в Лионском книжном —
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){
}
или ее варианты, также проблема, потому что они или не выделяются достаточно, или худший вывод к другим опечаткам.
Я не думаю, что процедура, но Ваше форматирование является довольно странным. Нет ничего неправильно с:
/* Eat spaces */
while ((c = getchar()) == ' ');
(то есть, укажите, что существует намеренно не тело)
Хорошо, если Вам действительно не нравятся пустые фигурные скобки, Вы могли бы осуществить рефакторинг тот внутренний цикл в
while (c == ' ') {c = getchar();}
, Это стоит одного дополнительного сравнения, хотя, таким образом, цикл с условием продолжения был бы лучше.
Ну, не действительно, но это зависит от Вашей архитектуры.
if (dosomething()) { ; }
Вышеупомянутое собирается постоянно продвинуть и появиться от Вашего локального стека, который имеет память наверху. Кроме того, Вы будете также сбрасывать конвейеры своих процессоров с noop операциями.
null
).
– Andrei Gheorghiu
22 November 2018 в 10:01
Я использовал код как это. Я не думаю, что существует действительно любая причина не использовать его, если ситуация гарантирует его.
+/-INT
значение), не часовой пояс (строка как " Америка Angeles" / Лос Angeles"). Они - два полностью различных понятия.
– dudewad
15 January 2018 в 22:32
Альтернативная опция, которая еще не была упомянута:
while(condition)
(void)0;
я действительно не предпочитаю писать моим циклам этот путь , но у меня был TA в прошлом семестре, кто сделал.