Боюсь что в данном случае индус оказался более профессионален чем вы. Подобный код лично я встречал нередко и не только у индусов, но и в первоклассных проектах Apache. По идее, isDebugEnabled надо употреблять там, что нужна оптимизация по скорости, но некоторые пишут повсюду, считая это за полезную привычку, типа привычки сравнивать строку с переменной, а не переменную со строкой. Зачем так делают? Потому что у Log4j есть один очевидный нестаток. Описано здесь:
Если в данном случае перенести printable внутрь условия, то всё станет на свои места. Программист знал что делает, но немного ступил или запарился. Не смешно.
Если бы под if-ом был весь кусок кода, поведение проги менялось бы в заисимости от настроек логгера (например, мог бы вылететь exception при делении на 0), а так — поведение различается минимально, меньше сюрпризов.
Сам по себе код оставляет желать лучшего, коненчо.
Здравствуйте, Jack128, Вы писали:
J>Здравствуйте, Young, Вы писали:
Y>>Здравствуйте, Lazy Cjow Rhrr, Вы писали:
Y>>Погоди, погоди. А что если isDebugEnabled возвращает константу какую либо этот кусок не будет в java выкинут? Тут же явно видно что, printable не используется?
J>char key = Console.ReadKey(); // key — дальше нигде используется. J>Как считаешь — можно эту строку выкинуть???
Нельзя. И компилятор это прекрасно понимает, потому что ReadKey меняет состояние объекта. Это не константная функция.
А вот есть Console.ReadKey бы не меняло состояние объекта и всегда бы возвращала константу — то таки да — можно было бы выкинуть.
Короче, к исходному примеру какое отношение имеет?
On 17/04/11 11:02, Young wrote:
> Нельзя. И компилятор это прекрасно понимает, потому что ReadKey меняет состояние объекта. Это не константная функция. > А вот есть Console.ReadKey бы не меняло состояние объекта и всегда бы возвращала константу — то таки да — можно было бы выкинуть.
> Короче, к исходному примеру какое отношение имеет?
А как узнать что меняет состояние, а что не меняет? Компилятор не бог... стоит вот вызов new DecimalFormat() и format.format() и уже хз что там у неё в нутре.
Если только hotswap догадаться сможет...
Posted via RSDN NNTP Server 2.1 beta
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
On 26/04/11 21:00, Ромашка wrote:
> А ты бог? Ты знаешь, что меняет состояние? Отдашь аппендикс на отсечение > что, скажем, перехваченный эксепшен в индексере historicWeights не > взводит isDebugEnabled == true?
Если так, то таких писателей гнать в шею надо.
> ЗЫ. Код странный. Но обсуждение еще более странное.
Код нелепый, автор не читатель, достаточно прочитать доку для isDebugEnabled и становится всё очевидным.
Posted via RSDN NNTP Server 2.1 beta
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
S>Боюсь что в данном случае индус оказался более профессионален чем вы. Подобный код лично я встречал нередко и не только у индусов, но и в первоклассных проектах Apache. По идее, isDebugEnabled надо употреблять там, что нужна оптимизация по скорости, но некоторые пишут повсюду, считая это за полезную привычку, типа привычки сравнивать строку с переменной, а не переменную со строкой. Зачем так делают? Потому что у Log4j есть один очевидный нестаток. Описано здесь: S>http://dev-things.blogspot.com/2010/06/logger-isdebugenabled.html S>Если в данном случае перенести printable внутрь условия, то всё станет на свои места. Программист знал что делает, но немного ступил или запарился. Ну о чём и речь. Не смешно.
Можно я тебе расскажу, где лопата?
А лопата в том, что построение printable требует уйму ресурсов, и даже более того, O(n) времени и памяти, и используется только при выводе на печать. В свете этого факта проверка isDebugEnabled — совершенно не вписывается в общий пейзаж, и попытка сей оптимизации (а эту строчку с isDebugEnabled вставляют именно для оптимизации расходов на отладочную печать — особенно при установке уровня выше debug) меня и улыбнула.
Очевидно, что чел либо копипастил на автомате, либо писал (тоже на автомате). Также очевидно, что формирование printable _нужно_ внести внутрь if(isDebugEnabled), а такая одинокая сопля как выше оптимизирует один только call virtual для метода debug объекта logger (порядка 3-х машинных инструкций).
Так вот, в качестве морали, коллега: не надо писать код на автомате. Думать нужно всегда, даже в случаях, которые кажутся простыми.
Погоди, погоди. А что если isDebugEnabled возвращает константу какую либо этот кусок не будет в java выкинут? Тут же явно видно что, printable не используется?
Здравствуйте, Young, Вы писали:
Y>Здравствуйте, Lazy Cjow Rhrr, Вы писали:
Y>Погоди, погоди. А что если isDebugEnabled возвращает константу какую либо этот кусок не будет в java выкинут? Тут же явно видно что, printable не используется?
char key = Console.ReadKey(); // key — дальше нигде используется.
Как считаешь — можно эту строку выкинуть???
Здравствуйте, tlp, Вы писали:
tlp>А по-моему, это правильно.
tlp>Если бы под if-ом был весь кусок кода, поведение проги менялось бы в заисимости от настроек логгера (например, мог бы вылететь exception при делении на 0), а так — поведение различается минимально, меньше сюрпризов.
Таки имелось в виду, что if нужно в метод debug поместить.
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
Сообщение заговорено потомственным колдуном, целителем и магом в девятом поколении!
Модерирование или минусование сообщения ведет к половому бессилию, венерическим заболеваниям, венцу безбрачия и диарее!
Y>Погоди, погоди. А что если isDebugEnabled возвращает константу какую либо этот кусок не будет в java выкинут? Тут же явно видно что, printable не используется?
Компилятор жабы вообще не пытается заниматься оптимизациями. Ну, разве что кроме замен цепочек конкатенации на StringBuilder-ы. Оптимизация производится JIT-ом на основе данных в рантайме.
Например, код
public class Comp {
public static void main(String[] args) {
foo();
}
private static void foo() {
}
}
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.
Здравствуйте, Lazy Cjow Rhrr, Вы писали:
LCR>о_О,
LCR>>>>от наших загорелых зарубежных коллег... о_О>>ненене, вот от таких: LCR>Так ты посмотри на их загар!
фиг ли занар, коль руки из жопы :о)
Здравствуйте, Кондраций, Вы писали:
К>Здравствуйте, tlp, Вы писали:
tlp>>А по-моему, это правильно.
tlp>>Если бы под if-ом был весь кусок кода, поведение проги менялось бы в заисимости от настроек логгера (например, мог бы вылететь exception при делении на 0), а так — поведение различается минимально, меньше сюрпризов.
К>Таки имелось в виду, что if нужно в метод debug поместить.
... К>>Таки имелось в виду, что if нужно в метод debug поместить.
B>это еще зачем?
Чтобы не повторять его везде.
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
Сообщение заговорено потомственным колдуном, целителем и магом в девятом поколении!
Модерирование или минусование сообщения ведет к половому бессилию, венерическим заболеваниям, венцу безбрачия и диарее!
17.04.2011 15:53, Здравствуйте, . : > А как узнать что меняет состояние, а что не меняет? Компилятор не бог...
А ты бог? Ты знаешь, что меняет состояние? Отдашь аппендикс на отсечение
что, скажем, перехваченный эксепшен в индексере historicWeights не
взводит isDebugEnabled == true?
ЗЫ. Код странный. Но обсуждение еще более странное.
Posted via RSDN NNTP Server 2.1 beta
Всё, что нас не убивает, ещё горько об этом пожалеет.
Здравствуйте, Кондраций, Вы писали:
К>Здравствуйте, blackhearted, Вы писали:
К>... К>>>Таки имелось в виду, что if нужно в метод debug поместить.
B>>это еще зачем? К>Чтобы не повторять его везде.
Однако сие может иметь определенные неприятные последствия.
Так нормально
if (debug) Log("Проверили серийник и результат Окейный");
Так вроде бы тоже, хотя не уверен, давно проверял
Log("Проверили серийник и результат Окейный");
А вот так легко ловим сторонний эффект и оставляем в сборке то чему в ней быть не следует.
Log("Проверили серийник и результат Окейный: " + getAuthenticationToken());
Да, конечно, есть обфускатор который может это удалить (а может и не удалить), но лично у себя пишу if (debug) Log(). Как-то спокойней.
Здравствуйте, MescalitoPeyot, Вы писали:
... MP>А вот так легко ловим сторонний эффект и оставляем в сборке то чему в ней быть не следует. MP>
MP>Log("Проверили серийник и результат Окейный: " + getAuthenticationToken());
MP>
Так это-же геттер! Хотя быть всякое, наверное, может, во всяком случае вызов остаётся. Жаль, если для явы это наилучшее решение. Ну в таком случае лучше уж макрос VERIFY из MFC.
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
Сообщение заговорено потомственным колдуном, целителем и магом в девятом поколении!
Модерирование или минусование сообщения ведет к половому бессилию, венерическим заболеваниям, венцу безбрачия и диарее!