Здравствуйте, landerhigh, Вы писали:
l> Тем, для кого юнит-тесты эквивалентны занятию ерундой, срочно рекомендуется сменить профессию. На сантехника или там развозчика пиццы. l> Других мнений по этому поводу быть не может.
Интересно за что сантехников обидели ) Думаете так просто сантехником работать или там думать не надо? )
Здравствуйте, мыщъх, Вы писали:
L>> для кого юнит-тесты эквивалентны занятию ерундой, срочно сменить профессию. L>> Других мнений по этому поводу быть не может. М>а вы тесты писали? насколько серьезно подходили к процессу их разработки?
Почему в прошедшем времени?
Остальное поскипано как очередная история очередного ниасилинга с кучей оправданий одно другого убедительнее. Обсуждения не заслуживает.
Здравствуйте, wander, Вы писали:
W>Интересно за что сантехников обидели ) Думаете так просто сантехником работать или там думать не надо? )
Почему же обидел? Просто за пропущенное юнит-тестирование (убедиться в отсутствии протечек) сантехник, в отличие от криворучки-программиста, может вполне получить неиллюзорных люлей непосредственно от заказчика и порой прямо не доходя до кассы. Отделаться сдавленными матами от коллег, которые потом придут это поддерживать, не выйдет.
N>после второго курса любая прога на делфи начиналась у меня с {$O-}. Раз потратил вечер на понимание как в коде
N>
N>for i:=0 to 7 do
N> ...
N>
N>i принимает значение 8, 9 и только потом выходит. А ответ прост как сало без хлеба: баг оптимизации.
Не нарывался на именно такой баг. Это в какой версии он был?
В любом случае, в моей ситуации оптимизация не причем и бага не было, было очень неприятно меня удивившее не точное знание как работают исключения или вернее, как работает exit.
Re[3]: Как важно проверять в программах ошибки до конца
Здравствуйте, HelgSpb, Вы писали:
> Другой вопрос, что сам факт использования exit() не говорит в пользу автора. Это, имхо, примерно как goto.
И exit и goto в определенных обстоятельствах очень удобны. Например, чтобы быстро выйти из вложенного цикла. Как раз потому что я редко пользовался exit-ом, такое непонимание его работы долго оставалось незамеченным. Ну и плюс, оказывается, в реальных программах функции работы с памятью могут чаще, чем кажется, прощать ошибки.
Re[7]: Как важно проверять в программах ошибки до конца
Здравствуйте, Michael7, Вы писали:
M>Не нарывался на именно такой баг. Это в какой версии он был?
7я кажется, может 6я. Думаю воспроизвести будет непросто, надо какое-то стечение случайных факторов
M>В любом случае, в моей ситуации оптимизация не причем и бага не было, было очень неприятно меня удивившее не точное знание как работают исключения или вернее, как работает exit.
дык на то он и finally
If the message above is in English — means I'm wasting my work time and work computer to post here. No hard feelings
Re[5]: Как важно проверять в программах ошибки до конца
Здравствуйте, мыщъх, Вы писали: М> программист, который писал функцию факториала был не в курсе что такое факториал вообще и очень сильно удивился, когда _все_ калькуляторы считали факториалы дробных чисел. программист сказал, что они все идиоты и едут по встречной, а он находится в своем ряду.
А можно для тупых поподробней. Я всегда считал, что факториал определён только для целых неотрицательных чисел. Гамма функция это какбы не совсем факториал.
Re[3]: Как важно проверять в программах ошибки до конца
Здравствуйте, HelgSpb, Вы писали:
D>>программисты на дельфи — это всегда очень печальное зрелище. хуже только программисты на 1С D>>сорри, ниче личного, но это реально факт.
HS>Знаете, ничего личного, но, например, я, с высоты 11+-летнего опыта промышленной разработки на целой куче императивных языков, не вижу принципиальной разницы между дельфи, крестиками, джавой, шарпом, и чем-бы то ни было ещё императивным.
между тем она есть. и даже не в самом языке дело.
дельфи создает иллюзию простоты, там низкий порог вхождения, типичный дельфист — это формошлеп, слабо представляющий внутреннее устройство системы со всеми отсюда вытекающими последствиями.
разумеется, про всех не говорю, говорю про тенденцию.
лет 10 назад мне довелось отсмотреть кучу (больше сотни) мелких проектов, сделанных разными людьми; больше половины из них на дельфи.
статистика однозначная — сделанное на дельфи очень сильно проигрывает тому же С++.
In P=NP we trust.
Re[2]: Как важно проверять в программах ошибки до конца
Здравствуйте, djs_, Вы писали:
M>>Это меня ошарашило. Я несмотря на то, что казалось бы имею давний опыт программирования на Delphi еще с 90-х годов и иногда периодически что-то писал, не знал, что exit внутри try...finally вызывает не немедленный выход из функции, а переход к блоку finally. Думал, что этот блок исполняется только в нормальном случае или при исключениях, а exit немедленно завершает функцию.
_>Не в качестве сарказма, а действительно любопытно — 2ALL: а где нибудь есть иное поведение?
В Java также (exit — читай return). И это, кстати, это довольно стандартный вопрос на собеседованиях и во всяких тестах.
_>И можно как нибудь вывернуться и это переопределить, скажем, на Java?
System.exit()
Re[6]: Как важно проверять в программах ошибки до конца
Здравствуйте, Dolios, Вы писали:
D>Здравствуйте, мыщъх, Вы писали: М>> программист, который писал функцию факториала был не в курсе что такое факториал вообще и очень сильно удивился, когда _все_ калькуляторы считали факториалы дробных чисел. программист сказал, что они все идиоты и едут по встречной, а он находится в своем ряду. D>А можно для тупых поподробней. Я всегда считал, что факториал определён только для целых неотрицательных чисел. Гамма функция это какбы не совсем факториал.
У Кнута, буквально чютьли не на первых страницах есть непрерывный график факториала.
Re: Как важно проверять в программах ошибки до конца
Здравствуйте, Michael7, Вы писали:
M>Это меня ошарашило. Я несмотря на то, что казалось бы имею давний опыт программирования на Delphi еще с 90-х годов и иногда периодически что-то писал, не знал, что exit внутри try...finally вызывает не немедленный выход из функции, а переход к блоку finally. Думал, что этот блок исполняется только в нормальном случае или при исключениях, а exit немедленно завершает функцию. Ошибался. Теперь удивляюсь, как же я умудрился раньше не нарваться на ошибки в этом месте (дважды вызов Free например из-за этого)
Всегда вспоминай этот случай, прежде чем создавать темы, подобные этой
Здравствуйте, мыщъх, Вы писали:
М>Здравствуйте, linuz, Вы писали:
L>>Если никто не знает как это должно работать, ничего не поможет. Юниттесты скорее для другого: ловить случаи когда все работало и вдруг бац — сломалось. М>ок. factorial = gamma(n) + 1. если гамма считается приближенно, то factorial = gamma(n), но при этом 0! выдаст очень странный результат. допустим, в оригинале было factorial = gamma(n) + 1, кто-то убрал '+1'. юнит тест не проверял факторил нуля. и все типа работает. а потом -- бац! и кто-то передал в функцию ноль. чем поможет юнит-тест? а ничем.
Я вам про фому, а вы мне про ерему. Вы как раз про тот случай когда автор кода толком не понимает чего он от своего кода хочет. А я про то, что юниттесты нужны чтобы не отвалилось что-то что раньше точно работало.
М>или вот классический случай вычисления факториала через рекрусию:
М>int factorial(int n) { М> return n == 0 ? 1 : n * factorial(n — 1); М>}
Вариант безглючный и самотестирующийся. Если понадобится факториал дабла, отрицательных чисел, натуральных дробей, и.т.д, то буду делать по учебнику, применяя подходящие к случаю типы данных.
Re[4]: Как важно проверять в программах ошибки до конца
Здравствуйте, Michael7, Вы писали:
M>И exit и goto в определенных обстоятельствах очень удобны. Например, чтобы быстро выйти из вложенного цикла. Как раз потому что я редко пользовался exit-ом, такое непонимание его работы долго оставалось незамеченным. Ну и плюс, оказывается, в реальных программах функции работы с памятью могут чаще, чем кажется, прощать ошибки.
Это знаешь, как на красный иногда можно проехать. Можно, конечно. И временами действительно удобно. Но именно из-за таких решений в свою пользу и появляются ошибки. Решил ты, что здесь goto удобен, Вася Пупкин тоже решил в свою очередь, а потом и Баба Марья написала такую фигню в другом месте. И оба-на! Теперь у вас куча goto в проекте, написанные разными людьми. Потому и говорят: не пиши goto. Вот просто не пиши и всё.
Re[7]: Как важно проверять в программах ошибки до конца
Здравствуйте, LLIMblrA, Вы писали: LLI>У Кнута, буквально чютьли не на первых страницах есть непрерывный график факториала.
Факториала? Я не спорю, что есть функции, которые проходят через все точки, в которых определен факториал (гамма-функция). Но сам факториал определен только для целых неотрицательных чисел. Педивикия со мной согласна.
Re[2]: Как важно проверять в программах ошибки до конца
Здравствуйте, MxMsk, Вы писали:
MM>Здравствуйте, Michael7, Вы писали:
M>>И exit и goto в определенных обстоятельствах очень удобны. Например, чтобы быстро выйти из вложенного цикла. Как раз потому что я редко пользовался exit-ом, такое непонимание его работы долго оставалось незамеченным. Ну и плюс, оказывается, в реальных программах функции работы с памятью могут чаще, чем кажется, прощать ошибки. MM>Это знаешь, как на красный иногда можно проехать. Можно, конечно. И временами действительно удобно. Но именно из-за таких решений в свою пользу и появляются ошибки. Решил ты, что здесь goto удобен, Вася Пупкин тоже решил в свою очередь, а потом и Баба Марья написала такую фигню в другом месте. И оба-на! Теперь у вас куча goto в проекте, написанные разными людьми. Потому и говорят: не пиши goto. Вот просто не пиши и всё.
Если всех ровнять под одну гребенку и огульно запрещать всё что может привести к ошибкам, то получим бредовый и неадекватный coding style. Я видел как goto-ненавистники лепили мега-монстра с кучей хитровложенных ифов, do-while и свитчей только для того чтобы правильно выйти из нескольких циклов. Там без бутылки не поймешь когда и куда оно выходит, лучше бы написали goto.
Re[3]: Как важно проверять в программах ошибки до конца
Здравствуйте, Dimonka, Вы писали:
D>Здравствуйте, Niemand, Вы писали:
N>>после второго курса любая прога на делфи начиналась у меня с {$O-}. Раз потратил вечер на понимание как в коде D>
D>for i:=0 to 7 do
D> ...
N>>i принимает значение 8, 9 и только потом выходит. А ответ прост как сало без хлеба: баг оптимизации.
D>Если i нигде не используется, то какая разница какое значение i принимает?
Многоточие может означать не только глубину и полет мысли, но и какой-то код, который можно скипнуть в моем случае это был проход по графу, потому зашкаливание i играет таки большую роль
If the message above is in English — means I'm wasting my work time and work computer to post here. No hard feelings
Re: Как важно проверять в программах ошибки до конца
M>Мораль в качестве выводов:
M>1) Если есть ошибка полезно докопаться до ее истоков, а не просто избавиться от нее. M>2) Можно обнаружить что-то для себя новое в казалось бы давно и хорошо известном.
Мораль тут совсем иная. Нужно знать, как работают базовые конструкции языка, на котором пишешь. Мне лень лезть в делфевые доки(никогда с делфями не работал), но что-то мне подсказывает, что в них черным по белому написано, как ведет себя finally.
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.