Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.147.54.6] |
|
Страницы: (12) « Первая ... 6 7 [8] 9 10 ... Последняя » все ( Перейти к последнему сообщению ) |
Сообщ.
#106
,
|
|
|
Вообще это показаны вызовы. Что откуда вызывается. У тебя на блок схеме(и в условии задачи так же) - решения(DecisionN) - в зависимости от результата(true/false), который сделал процесс, определяют какой процесс будет вызван следующим. Но сам процесс - никак не участвует в передаче управления кому либо, он лишь выполняет некие операции. Вот и получается что на схеме показаны вызовы от решений(Decision), а стрелки от процессов, всегда направлены на соответствующее процессу решение. Процес1 всегда ссылается на решени1, Процесс2 на решение2, процес3 на решение3 и т.д. Поэтому странно считать что ProcessN - что то там обрывает. Он не обрывает выполнение программы, он просто ничего не вызывает, и ни накого не ссылается, просто выполняет определенную операцию и все. Добавлено Во первых в твоем этом коде уже можно запутаться, ты помнишь свой аргумент про то, сколько человек может вещей в уме держать одновременно? У тебя тут как минимум 4 метки и 4 процесса, перемешанные в условиях, что уже ломает общую картину, а ведь это только 4 процесса! Если их тут будет даже не 50, а еще столько уже - это уже будет нечитаемое говно, даже с учетом твоего форматирования. Потом, то что ты метку, вызов функции, потом условный оператор вместе с телом зарядил в одну строчку - это вообще отдельный лол. Потом эту шнягу такой сохраняешь, а какая нибудь падла типа IDE, или еще какой нибудь штуки, неверно раздуплилась с табами в перемешку с пробелами, и получилась каша, снова форматируй. Потом ты взял эталонный спагети код, отформатировал его - чтоб визуально не наблюдать этот звиздец, и выдаешь это за ахеренное архитектурное решение. Но в нем даже при 4-рех процессах, уже глаза разбегаются! |
Сообщ.
#107
,
|
|
|
Majestio, кажись, я слегка погорячился, прованговав всем известный паттерн.
Цитата Wound @ Сосбсна, в этих случаях goto как раз и выручает. Я понимаю, что это не вполне интуитивно, но в исходном коде goto появился ровно по причине внезапно изменившегося ТЗ. Majestio вас некисло так потроллил, сформулировав ТЗ так, что у вас все вводные сразу на руках. Уверяю, в рамках его условия, если я и выложу код, хотя боюсь, к тому времени конкурс уже будет закрыт, там goro не будет. Суровая реальность когда система постоянно расширяется, и дополняется. Выдвигают новые условия, новые фичи и т.д. |
Сообщ.
#108
,
|
|
|
Цитата korvin @ Странный ты, наплодил себе классов, теперь без сгенерированной диаграммы не можешь разобраться в коде ) Нет, это ты странный. Я прекрасно в своем коде разбираюсь, это же ты зачем то захотел из кода получить диаграмму. Так я тебе ее сделал, даже не смотря в код. Хотя там по коду и так все ясно без всяких диаграм. Теперь когда я тебя попросил построить диаграмму, ты пишешь что тут и так все ясно. Но тут ничего не ясно, тут ты из лапши попытался сделать что то более менее читаемое, но все эти метки в перемешку с процессами и if'ами - лишь ломают общую картину. Добавлено Цитата Qraizer @ Сосбсна, в этих случаях goto как раз и выручает. Я понимаю, что это не вполне интуитивно, но в исходном коде goto появился ровно по причине внезапно изменившегося ТЗ. Majestio вас некисло так потроллил, сформулировав ТЗ так, что у вас все вводные сразу на руках. Уверяю, в рамках его условия, если я и выложу код, хотя боюсь, к тому времени конкурс уже будет закрыт, там goro не будет. Меня goto ниразу не выручал, потому что я им не пользуюсь, и даже там где возможно его можно было впендюлить - как правило всегда находятся более приемлемые решения. А вот когда на него натыкаешься - жгучую боль пониже спины он не редко вызывает, это да. |
Сообщ.
#109
,
|
|
|
Цитата Qraizer @ всем известный паттерн. Что за паттерн-то? |
Сообщ.
#110
,
|
|
|
Цитата Qraizer @ к тому времени конкурс уже будет закрыт, там goro не будет. korvin и Wound по красоте зарубились! Очень хочу дождаться участия ЫукпШ, OpenGL (но у него проблемсы), D_KEY, они ведь тут подбрасывали в начале идеи. Ну и вскроем пароли |
Сообщ.
#111
,
|
|
|
Вот так оно будет к слову выглядеть, если переписать по нормальному, а не бабочек рисовать кодом, которые потом еще попробуй пойди отладь: int main() { PROC_1 : process_1() ; if (decision_1()) goto PROC_4 ; else goto PROC_3 ; PROC_2 : process_2() ; if (decision_2()) goto PROC_3 ; else goto PROC_4 ; PROC_3 : process_3() ; if (decision_3()) goto PROC_2 ; else goto PROC_1 ; PROC_4 : process_4() ; if (decision_4()) goto EXIT; else goto PROC_2 ; EXIT: return 0; } Очень все ясно и понятно, решение просто космос. Добавлено Я тут даже чутка отформатировал отступы для меток, чтоб оно хоть как то полегче понималось. И это самый простейший случай! |
Сообщ.
#112
,
|
|
|
Спасибо korvin и Wonder за обсуждение - вы меня вдохновили на новую версию!
Wonder, отдельный респект - он мне в личку раскрыл свои исходники. И я подсмотрел у него некоторые профессиональные решения - но пришлось использовать оператор goto Прилагаю вторую версию, добавил изящества 80 лвл. Прикреплённый файлmajestio_goto.cpp.7z (1002 байт, скачиваний: 33) |
Сообщ.
#113
,
|
|
|
Цитата Wound @ которые потом еще попробуй пойди отладь Юнит-тесты? Не, не слышал. Цитата Wound @ Вот так оно будет к слову выглядеть, если переписать по нормальному Ты ничего не понял и всё испортил. |
Сообщ.
#114
,
|
|
|
Цитата korvin @ Юнит-тесты? Не, не слышал. Во первых причем тут юнитесты? У тебя будет чуть сложнее условие, ты в if'возьмешь провтыкаешь и вместо какого нибудь == напишешь присваивание(в плюсах как нехер делать), и потом сиди отлаживай своими юниттестами свою портянку, они тебя в этом случае не спасут. Ты там недавно мне втирал про стектрейсы с DI, откуда ты их мог видеть, если у тебя контраргумент против отладки - Юнит-Тесты? Я ж так понимаю ты никогда не отлаживался, все юнит-тестами Цитата korvin @ Ты ничего не понял и всё испортил. Нет, я прекрасно все понял. Ты взял эталонный спагетти-код, и просто захерачил 3 конструкции в одну строчку однотипно, чтоб этот трешак - более менее можно было понять. Даже у условных любителей goto, которые не брезгуют его применять, есть правила. И одно из них - прыгать можно на метку вперед, назад - это уже из серии говнокода, даже среди поклонников goto. А у тебя как раз тот случай, когда в зависимости от условия мы будем прыгать непойми куда, либо вперед, либо назад, за что собственно и критикуют goto, и предсказать выполнение программы, без ее отладки - зачастую затруднительно. Это даже затруднительно сделать глядя на твой код. Т.к. тут 4 метки, 4 условия(if/else), 8 прыжков, и код не тривиальный, т.к. ты несколько конструкций включая if/else в одну строку свернул(такое в основном студенты любят делать), что снижает читабельность и понимание кода. Так что кончай прикрывать этот спагетти-код, каким то сомнительными аргументами. Добавлено Все эти goto вполне себе могут быть оправданы в низкоуровневых яп , типа асма, да хоть те же си, где банально нет интструментов и смысла городить всякую архитектуру в стиле ООП или еще каком. |
Сообщ.
#115
,
|
|
|
Цитата Wound @ ты в if'возьмешь провтыкаешь и вместо какого нибудь == напишешь присваивание(в плюсах как нехер делать) Это не только статические анализаторы, это уже компиляторы давно отлавливают. Добавлено Цитата Majestio @ Очень хочу дождаться участия ... D_KEY, они ведь тут подбрасывали в начале идеи Ну поговорку про разговоры и мешки ты знаешь У меня сейчас полный завал дел и на работе и вообще в жизни, так что не смогу. |
Сообщ.
#116
,
|
|
|
Цитата D_KEY @ Это не только статические анализаторы, это уже компиляторы давно отлавливают Компилятор выдаёт варнинг, а не ошибку, т. к. это вполне себе законная конструкция. Поэтому не совсем понимаю к чему это? Мы общаемся про сферических коней в вакууме, и как по мне, форматирование кода, в стиле 5 конструкций в одну строчку, здорово усложняют не только отладку, но и чтение кода. |
Сообщ.
#117
,
|
|
|
Ещё одна, альтернативная, версия на Ocaml:
Прикреплённый файлmajestio_machine_alt.ml.zip (1006 байт, скачиваний: 33) И чисто функциональная версия на Haskell: Прикреплённый файлMajestio.hs.zip (895 байт, скачиваний: 33) Добавлено Цитата Wound @ Компилятор выдаёт варнинг, а не ошибку, т. к. это вполне себе законная конструкция. C/C++-проблемы. Заметь, ни один мой вариант не использует эти языки. |
Сообщ.
#118
,
|
|
|
Цитата korvin @ C/C++-проблемы. Заметь, ни один мой вариант, не использует эти языки. Да, в плюсах это наследие от Си. В тех же шарпах это не законная конструкция и будет ошибка компиляции |
Сообщ.
#119
,
|
|
|
Цитата Wound @ Компилятор выдаёт варнинг, а не ошибку Я без -Werror уже несколько лет не работаю. Впрочем, еще и статические анализаторы подключаю. |
Сообщ.
#120
,
|
|
|
Цитата D_KEY @ Я без -Werror уже несколько лет не работаю. Впрочем, еще и статические анализаторы подключаю. А те варнинги от которых в принципе избавится не возможно, ты давишь директивами #pragma Аргументы поперли просто жесть. Да какая разница с чем ты там работаешь или нет? Мы обсуждаем твою личность тут или чего? Я goto в принципе не использую, и никогда в жизни у меня даже не возникало ни желания, ни мысли его использовать на работе(разве что только в исследовательских целях, дома когда изучал ЯП). Значит все в мире должны перестать его тоже использовать? Я верно понял твою логику? Добавлено И вообще goto рудимент и пережиток прошлого. В тех языках например, где нет конструкции break в циклах for - его еще можно оправдать, а именно там он как бы и уместен, чтоб выпрыгивать досрочно из цикла, и то в тех же языках - его можно заменить while'ом, и никаких goto не нужно. А в высокоуровневых языках, я даже не могу представить где бы он мог бы понадобиться. Добавлено Разве что писать спагетти-код, и доказывать окружающим, что теперь я в этом вижу какую то блоксхему... |