и о культистах
Aug. 3rd, 2014 09:37 pmДядя из позапрошлого поста сослался на свой собственный разбор того, почему использовать goto не только плохо, но еще и иногда хорошо.
И действительно, как вспомню сколько было потрачено моего времени на борьбу с запретом goto, с запретом множественных точек выхода, с венгерской нотацией (в майкрософтовском смысле), с обязательной проверкой всех аргументов в каждой функции… аж вздрогну. Сколько этих безумных, дебильных карго-культов накопилось в индустрии… и никто не считает нужным не то что бороться с ними, а даже и просто понять контекст в котором эти запреты были актуальны, а так… что-то где-то слышали, и при этом уже рвутся в бой писать правила игры. У них что, в детстве в песочнице всё время совочек отбирали, или что?
И действительно, как вспомню сколько было потрачено моего времени на борьбу с запретом goto, с запретом множественных точек выхода, с венгерской нотацией (в майкрософтовском смысле), с обязательной проверкой всех аргументов в каждой функции… аж вздрогну. Сколько этих безумных, дебильных карго-культов накопилось в индустрии… и никто не считает нужным не то что бороться с ними, а даже и просто понять контекст в котором эти запреты были актуальны, а так… что-то где-то слышали, и при этом уже рвутся в бой писать правила игры. У них что, в детстве в песочнице всё время совочек отбирали, или что?
no subject
Date: 2014-08-05 04:04 pm (UTC)Поймите же наконец вы, поборники обсессивно-компульсивного стиля кодирования, что любая, абсолютно любая ошибка означает, что запорот некоторый кусок работы, и чтобы дальше осмысленно продолжать, надо восстановиться. И закладывается такая возможность на этапе системного проектирования, причём в каждом конкретном случае и на каждом уровне абстракции методы восстановления будут свои (где-то можно и процесс уронить, перезапустив джоб потом в супервайзере). Иногда можно и проверку аргументов сделать, чаще всего это осмыслено на межмодульных интерфейсах, но и она не решает всех проблем. А пихать проверку всех подряд аргументов в coding standard и на этом успокаиваться — долбоебизм, за который надо ссаными тряпками гнать из профессии. Пример:
char *join(char **array) { size_t total = getsize(array) char * buf = malloc(total); ... char * r = buf; for(...) { buf = _concat(buf, array[..]); } ... return r; }вот кому и чем поможет, если _concat в приведенном примере будет проверять свои аргументы (при условии что она является внутренней для данного модуля)?
> Я на эту тему у себя писал
ссылку?
no subject
Date: 2014-08-05 07:06 pm (UTC)no subject
Date: 2014-08-05 07:10 pm (UTC)я, предлагаю, пользуясь электрической аналогией, не вешать автоматические расцепители и узо на каждую розетку.
no subject
Date: 2014-08-05 07:23 pm (UTC)тут вопрос в затратах - стоит ли сдуру воткнутый электрочайник вырубившегося компа или хрен с ним. вопрос, хочешь ли ты об этом поговорить :)