Я уже как-то показывал здесь код с goto. Имхо, вот этим goto и плох. Автора темы попрошу попробовать в этой лапше разобраться, для понимания.
zlos
> Вы сравниваете программистов писавших безглючный код с математическим
> доказательством с говнокодерами чьи поделия глючат неписуемым образом и
> работают только с помошью чей-то матери?
Безглючного кода никто, никогда и ни разу не писал. Ещё из тех седых времён идёт притча о 2-х профессорах, которые поспорили, можно ли написать безглючную программу с первого раза. Программа получилась что-то типа 20 строк, и в ней обнаружилось несколько ошибок.
Насчёт математических доказательств - я вас умоляю. Это работает только на сравнительно простых алгоритмах, типа сортировки и многопоточно-синхронизационных примитивов (да и то с оговорками). Для чего-либо более сложного задача превращается в невыполнимую по определению. Будь это не так, у нас бы были мощные статические кодоанализаторы, которые бы для любого говнокода могли указать все косяки на стадии компиляции. Но доказана даже теорема, что такие программы невозможны.
Поэтому замахиваться с математическими доказательствами на что-либо более-менее сложное - мозгоблудство чистейшей воды. И этим не занимается никто в здравом уме. В здравом уме пишут не код, который не глючит, а код, который удобно дебажить.
> Вы про ПО шаттлов слышали? Это кустарное изделие?
А сколько в этом изделии мегабукв, и тыща девятьсот семьдесят какого оно года производства?
Lamer007
> Face PalmOS. Почитайте Маконела: Совершенный код.
От всех писулек типа "как правильно программировать" у меня остаются неизменно скорбные впечатления как об афторах, так и об чейтателях, которые их воспринимают за чистую монету. На практике оказывается, что все эти рекомендации хороши только для того, чтобы лечить на лекциях доверчивых студентов. Жизнь проще и суровее.
> Зачем в одну функцию запихивать 3*100500+с строк? Это детский сад. Вам нужно
> научится делать декомпозицию кода. 1-20 строк на функцию. Не больше. И в любом
> случае нужно делать так, чтобы функция влезала в "1 экран" по ширине и особенно
> длине.
Золотое эмпирическое правило нумер раз: "Не выноси кусок кода в функцию, если она вызывается не более чем в одном месте".
К слову сказать, рекомендую присутствующим проникнуться следующим дзеном: вызов функции - тот же самый goto. У неё даже метка есть.
TarasB
> Фигня.
Иного ответа я и не ожидал.
Den Zurin
> Попробуй написать так же коротко и понятно без GOTO.
да не вопрос
void replace_matrix_item(int **matrix, int cols, int rows, int value, int newvalue) { for( int i = 0; i < rows; i++ ) { int* foundElement = std::find( &matrix[i][0], &matrix[i][cols], value ); if ( foundElement != &matrix[i][cols]) { *foundElement = newvalue; break; } } }
http://ideone.com/RcwqH
красивее правда?
Sbtrn. Devil
> Иного ответа я и не ожидал.
Ну что делать, если на твою фигню по-другому ответить и не выходит. И пример твой - фигня, переписывается на цикл как нефиг, и читабельнее.
Sbtrn. Devil
> Золотое эмпирическое правило нумер раз: "Не выноси кусок кода в функцию, если
> она вызывается не более чем в одном месте".
Сам придумал?
Sbtrn. Devil
> "Не выноси кусок кода в функцию, если она вызывается не более чем в одном
> месте".
рукалицо.жпг
у меня 80% функций используются только в одном месте.
А в gcc можно метки обрабатывать как значения и даже складывать в массив. http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html#Labels-as-Values. Круто :)
Вообще прикольно оставлять в программах хоть один goto чисто для прикола, типа такая реликтовая окаменелость.
Sbtrn. Devil
> А сколько в этом изделии мегабукв, и тыща девятьсот семьдесят какого оно года
> производства?
Меньше миллиона, оно модифицировалось и развивалось непрерывно. Этим занималась организация занимающая отдельное многоэтажное здание. Любая найденная бага означала ЧП и разбор полётов.
Den Zurin
> Тут уже обойтись без GOTO проблематично.
ИМХО если код без GOTO получился монстром, то значит код написан в корне не верно и нужно его переписать иначе.
Sbtrn. Devil
> Золотое эмпирическое правило нумер раз: "Не выноси кусок кода в функцию, если она вызывается не более чем в одном месте".
И откуда такое правило?
Я с ним не согласен.
> К слову сказать, рекомендую присутствующим проникнуться следующим дзеном: вызов функции - тот же самый goto. У неё даже метка есть.
Не важно, что происходит внутри, важно то, как это читается и понимается человеком.
в некоторых языках вообще goto нету и нормально так живут
Sbtrn. Devil
> а практике оказывается, что все эти рекомендации хороши только для того, чтобы лечить на лекциях доверчивых студентов.
Только если вы программист-одиночка и ваш код больше никто поддерживать не будет, в том числе и вы сами. На самом деле самому неудобно поддерживать свой код, если в нем одно говно. Одна функция с хорошим названием - одно действие -- золотое правило самодокументирующегося кода. Тоесть просто комментарии писать почти не нужно будет.
Sbtrn. Devil
> if (...) goto END;
> ... // 100500 строк
> ... // и так ещё много раз, в произвольном порядке
> END:;
Ещё скажите, что пишете на Си, а не С++ (:
Lamer007
> Одна функция с хорошим названием - одно действие -- золотое правило
> самодокументирующегося кода. Тоесть просто комментарии писать почти не нужно
> будет.
+1
Зачем такой ник себе взял? Пишешь та не как ламер. :)
Executor
> Зачем такой ник себе взял?
Спасибо. :) Я этот ник очень давно взял. Тогда ник был меня достоин. Да и я в каких-нибудь областях все равно ламер (так, как и за жизнь всего не изучишь), поэтому для таких случаев ник подойдет. Не стыдно даже глупый вопрос задать будет. (:
innuendo
> в некоторых языках вообще goto нету и нормально так живут
потому что не нужен
Den Zurin
break,
Pushkoff уже написал