1)
Еще раз, assert это не простое условие, а условие предназначенное для того чтобы быстро и мгновенно сказать программеру о том, что он не правильно понимает задачу. Т.е. инструмент поддержки продукта, когда к разработчику приходят и говорят о баге, тут он быстро достает дебажный билд и выясняет все что только можно.
То о чем вы говорите про «набедокурит» это runtime и logic ошибки. И это совсем из другой «оперы» ошибки.
2)
Посмотрим с другого угла зрения. assert — пишут с такой же целью что и unit-тесты. Вы же не включаете в продукт код unit-тестов? Лично я нет. Могу только иногда в отдельной папке ложить, если это библиотека.
Если у вас продукт хорошо обложен unit-тестами, то вы можете вообще не употреблять assert-ами.
3)
Как бы разработчик не старался весь код проверками невозможно обложить, ровно как и все и вся затестировать нельзя. Обложить все и вся проверками не получится, т.к. задачи и требования к продукту могут меняться. Поэтому код нужно обкладывать разумными проверками, который постарается правильно упасть, тем самым дать разработчику достаточную для поддержки информацию или упасть так, чтобы не привести к плачевным последствиям.
P.S.:
На сайте мелкософта можно закачать дебажное ядро Windows, попробуйте поработать с ним. В нем очень много assert-ов. Думаю вы поймете, когда надо, а когда не надо применять assert!
@ автору:
На мой взгляд у Вас немного путаница в терминологии.
1)
assert — это не просто условие во время исполнения программы, но прежде всего инструмент отладки. По этой причине в С++ в релизных билдах их уже нет, да и в других языках к примеру в Python assert
2)
То что Вы называете assert-ом проверки входных и выходных данных в статье на мой взгляд не правильно, лучше придерживаться мнения Страуструпа. Он называет это «пре и пост условия», а проверку значений в цикле «инвариантом» цикла.
Ну и стоит добавить что assert это способ сказать программеру о его ошибке, а не о том что там как-то звезды не так упали и фаза луны не та что ожидалась. Ассерт это «Эй чувак, тута не должно быть нуля, погляди код внимательней!!!»
Я даже искать не буду, там, за шкафом, стоит супергаджет моего детства: Клюшка перемотанная в нескольких местах. Этот гаджет подарил много кайфу, который не всегда получаю сейчас, даже написав офигенный код или отладив непростую багу.
После некоторого детального ознакомления с языком впечатления двойственные:
1) С одной стороны челюсть падает. Впечатляет простота и удобство, хотя бы testing с его Example* и Benchmark* чего стоит. Прям млин на уровне языка!!! Круто!
2) Писать все-таки придется много. К примеру в Hash-ах нет SHA-{128|256|512} и ряда других алгоритмов.
Вывод: пока подожду как будет развиваться ) Но на заметку взял, т.к. достаточно элегантен и прост)
Я научился переводить в уме, когда попробовал в первые написать свою первую компьютерную игру. У меня тогда был Компаньон-2 и спрайты там рисовать нужно было через задание каждой строки в десятичной, при этом сам спрайт разбивался на клетки в которой 8 на 8 пикселей. В то время я почему-то не умел задавать в Hex-е ;) Вобщем была бы мотивация, а научиться не сложно этому делу! ;)
Именно поэтому и надо доносить чуть ли не каждый день до команды. По одной простой причине, что ты можешь быть гордецом и считать себя мега-гением, а тебя во время пнут и покажут косяки. Ты спасен от плачевного финала, когда после нескольких часов, а то и дней узнаешь, что твоя мысль — дерьмо. А команда спасена от того, что сэкономлены твои человеко-часы и твоими руками можно сделать больше дел для проекта!
Материал очень полезен, но мне не понравилось оформление:
1) Примеры кода можно оформить в тегом «код», а то сейчас оно выглядит как будто автор применил тег «цитата»
2) Поясняющий текст к картинке слишком далеко расположен от картинки, которую он поясняет.
Вот! Видите Вы не говорите «Я готов работать за бесплатно», вы говорите «в принципе», т.е. когда Вам будет нечего кушать Вы будете действовать совершенно по-другому! А все потому что, когда человек сыт ему легче рассуждать о высоком! Когда же он не знает откуда взять очередные 25.000 руб за квартиру(1 комн. Москва), а при этом думает как бы еще на памперсы хватило и еще много на че, то у него «интерес» уходит в лучшем случае на второй план!
>>общебытовые вещи не делают людей похожими
А кто говорил про «похожесть»? Я говорил о том, что какими бы мы различными не были прежде всего мы люди!
Вы вот говорите «прыгаем по-другому». Если Вася прыгает выше Пети, это ведь не значит, что Вася стал на несколько процентов кенгуру. ВДВ-шники умеют неплохо ползать(нормативы у них), но это их не делает пресмыкающимися.
Какими бы мы различными не были и как бы по разному не делали что-нибудь мы продолжаем оставаться людьми!
>>для этого я учусь, стараюсь…
Вы это делаете для того, чтобы еще более эффективней решать свои задачи или задачи заказчика. Разве не так?
Учение на протяжении чуть ли не на протяжении всей его карьеры делает многое для программиста, но не эта особенность делает его программистом!
Программиста прежде всего делает «Огромное желание решить задачу максимально эффективно, а если позволяет возможность и элегантно».
Также есть мудрость первопрограммеров «когда ты отладил свой первый баг, ты стал программером» указывая на то, что именно умение отлаживать код является характерной чертой этой уникальной профессии.
На мой взгляд Вы заблуждаетесь говоря, что вы прежде всего программер. Чтобы это понять представьте маловероятную ситуацию, что Вам ваш начальник урезал зарплату и аванс скажем до нуля! Мотивируя: «Но ведь ты получаешь колоссальную возможность учиться на боевых ситуациях возникаемых на работе, думаю тебе этого хватит». Неужели Вас это устроит?
Ну так физик может воскликнуть «Я необычный чел, я Физик!». Но будет ли он для нас каким-то необычным? Нет, это просто чел шарящий в физики и по своему «сдвинутый по фазе». Но он обычный! Под «обычным» следует понимать что он\она также как и любой другой кушает, спит, радуется, прыгает и много еще другого. На мой взгляд программера понимать нужно объект класса «Программист», который унаследован от класса «Человек». А следовательно программер является прежде всего Человеком!
Затем что это, на мой взгляд, парадокс программиста. Он с одной стороны логичен и прагматичен, а с другой он обычный человек, который хочет быть признанным и понятым. С кем как не с себе подобными он может поделиться и выразить свои эмоции?
>>На основе таблиц. Погуглите, до меня хорошо расписано в сотнях источников.
Гуглится, к примеру это: llvm.org/docs/ExceptionHandling.html. Но все же лучше пример псевдокода
Еще раз, assert это не простое условие, а условие предназначенное для того чтобы быстро и мгновенно сказать программеру о том, что он не правильно понимает задачу. Т.е. инструмент поддержки продукта, когда к разработчику приходят и говорят о баге, тут он быстро достает дебажный билд и выясняет все что только можно.
То о чем вы говорите про «набедокурит» это runtime и logic ошибки. И это совсем из другой «оперы» ошибки.
2)
Посмотрим с другого угла зрения. assert — пишут с такой же целью что и unit-тесты. Вы же не включаете в продукт код unit-тестов? Лично я нет. Могу только иногда в отдельной папке ложить, если это библиотека.
Если у вас продукт хорошо обложен unit-тестами, то вы можете вообще не употреблять assert-ами.
3)
Как бы разработчик не старался весь код проверками невозможно обложить, ровно как и все и вся затестировать нельзя. Обложить все и вся проверками не получится, т.к. задачи и требования к продукту могут меняться. Поэтому код нужно обкладывать разумными проверками, который постарается правильно упасть, тем самым дать разработчику достаточную для поддержки информацию или упасть так, чтобы не привести к плачевным последствиям.
P.S.:
На сайте мелкософта можно закачать дебажное ядро Windows, попробуйте поработать с ним. В нем очень много assert-ов. Думаю вы поймете, когда надо, а когда не надо применять assert!
На мой взгляд у Вас немного путаница в терминологии.
1)
assert — это не просто условие во время исполнения программы, но прежде всего инструмент отладки. По этой причине в С++ в релизных билдах их уже нет, да и в других языках к примеру в Python assert
2)
То что Вы называете assert-ом проверки входных и выходных данных в статье на мой взгляд не правильно, лучше придерживаться мнения Страуструпа. Он называет это «пре и пост условия», а проверку значений в цикле «инвариантом» цикла.
Ну и стоит добавить что assert это способ сказать программеру о его ошибке, а не о том что там как-то звезды не так упали и фаза луны не та что ожидалась. Ассерт это «Эй чувак, тута не должно быть нуля, погляди код внимательней!!!»
ИМХО
1) С одной стороны челюсть падает. Впечатляет простота и удобство, хотя бы testing с его Example* и Benchmark* чего стоит. Прям млин на уровне языка!!! Круто!
2) Писать все-таки придется много. К примеру в Hash-ах нет SHA-{128|256|512} и ряда других алгоритмов.
Вывод: пока подожду как будет развиваться ) Но на заметку взял, т.к. достаточно элегантен и прост)
Развивайте коммуникативные навыки. Умение донести свою идею до команды может творить чудеса!
1) Примеры кода можно оформить в тегом «код», а то сейчас оно выглядит как будто автор применил тег «цитата»
2) Поясняющий текст к картинке слишком далеко расположен от картинки, которую он поясняет.
ЗЫ: Сорри за занудство! ;)
class input_stream: public stream;
class output_stream: public stream;
Вот пример того что у наследников может быть совершенно по-другому чем в родителе, но они же не перестают быть стримами!
А кто говорил про «похожесть»? Я говорил о том, что какими бы мы различными не были прежде всего мы люди!
Вы вот говорите «прыгаем по-другому». Если Вася прыгает выше Пети, это ведь не значит, что Вася стал на несколько процентов кенгуру. ВДВ-шники умеют неплохо ползать(нормативы у них), но это их не делает пресмыкающимися.
Какими бы мы различными не были и как бы по разному не делали что-нибудь мы продолжаем оставаться людьми!
>>для этого я учусь, стараюсь…
Вы это делаете для того, чтобы еще более эффективней решать свои задачи или задачи заказчика. Разве не так?
Учение на протяжении чуть ли не на протяжении всей его карьеры делает многое для программиста, но не эта особенность делает его программистом!
Программиста прежде всего делает «Огромное желание решить задачу максимально эффективно, а если позволяет возможность и элегантно».
Также есть мудрость первопрограммеров «когда ты отладил свой первый баг, ты стал программером» указывая на то, что именно умение отлаживать код является характерной чертой этой уникальной профессии.
На мой взгляд Вы заблуждаетесь говоря, что вы прежде всего программер. Чтобы это понять представьте маловероятную ситуацию, что Вам ваш начальник урезал зарплату и аванс скажем до нуля! Мотивируя: «Но ведь ты получаешь колоссальную возможность учиться на боевых ситуациях возникаемых на работе, думаю тебе этого хватит». Неужели Вас это устроит?
Гуглится, к примеру это: llvm.org/docs/ExceptionHandling.html. Но все же лучше пример псевдокода