|
Теорема Бома — Якопини реалистична? или снова про goto | ☑ | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0
MatrosoV AleXXXand_R
28.06.11
✎
15:32
|
Теорема Бома — Якопини — утверждение о структурном программировании, согласно которому любой исполняемый алгоритм может быть преобразован к структурированному виду, то есть такому виду, когда ход его выполнения определяется только при помощи трёх структур управления: последовательностей (sequence), ветвлений (selection) и повторов (repetition).
Теорема была сформулирована и доказана итальянскими математиками Коррадо Бомом (англ. Corrado Böhm) и Джузеппе Якопини (Giuseppe Jacopini) в их статье 1966 года[1]. В статье также описывались методы преобразования неструктурированных алгоритмов в структурированные. Публикация теоремы была толчком к началу дебатов о структурном программировании. Спустя 2 года вышла статья Эдсгера Дейкстры «Go To Statement Considered Harmful»[2], в которой он критиковал использование оператора GOTO и высказывался в пользу улучшения стиля программного кода за счёт использования структур управления и отказа от других инструкций, управляющих ходом алгоритма. wiki:Теорема_Бома_—_Якопини А как вы считаете - можно ли обойтись в программировании без GOTO (Перейти)? И считается ли плохим стилем программирования его использование или нет? |
|||||||||||||
2
Волшебник
28.06.11
✎
15:33
|
Лучше не использовать, но с осторожностью вполне можно применять.
Использовать можно, но в крайнем случае |
|||||||||||||
11
ДенисЧ
28.06.11
✎
15:36
|
баян немеряный, ещё с 68го года :-)
Нас этому в 93м учили... Использовать можно, но в крайнем случае |
|||||||||||||
13
Deni7
28.06.11
✎
15:37
|
(0) Если упрощает код и понимание кода, то почему бы и нет?
Использовать можно, но в крайнем случае |
|||||||||||||
17
Эльниньо
28.06.11
✎
15:39
|
Так
Использовать можно, но в крайнем случае |
|||||||||||||
22
Fragster
гуру
28.06.11
✎
15:54
|
(21) дада, гото в произвольное место кода - то, что нам нужно дли ИИ (половина мистян такие, а модераторы - так вообще все)
гото - просто низкоуровневая замена более красивым конструкциям Использовать можно, но в крайнем случае |
|||||||||||||
24
MatrosoV AleXXXand_R
28.06.11
✎
16:06
|
А я думаю все равно так
Использовать можно, но в крайнем случае |
|||||||||||||
30
Steel_Wheel
28.06.11
✎
16:11
|
Вполне можно использовать при выходе из ветвлений глубокой вложенности
Использовать можно, но в крайнем случае |
|||||||||||||
32
Lys
28.06.11
✎
16:15
|
(10): (применительно к 1С)
* "Выход из циклов многократной вложенности" - есть Возврат, но лучше всего - (19); * "Переход на точку выхода из функции" - Возврат; * "Переход в начало процедуры" - рекурсия. В моей практике ни разу не возникало задачи, которую можно было бы решить только через метки. И раза 3 приходилось переписывать после "пейсателей" код с метками - на код без меток. Правда, не исключаю, что я просто мало знаю. А посему: Использовать можно, но в крайнем случае |
|||||||||||||
37
Lama12
28.06.11
✎
16:18
|
За 18 лет программирования использовал GoTo только на спекртуме. :)
Либо когда шла оптимизация на скорость. Использовать можно, но в крайнем случае |
|||||||||||||
52
vladko
28.06.11
✎
16:24
|
я использую лишь при переборе строк документа и удаление ненужных, т.к. при удалении следующая строка проскакивает необработанной:
~Выбор: ВыбратьСтроки() Пока ПолучитьСтроку() = 1 Цикл Если <УсловиеУдаленияСработало> тогда Удалитьстроку(); Перейти ~Выбор; КонецЕсли; КонецЦикла; Какой алгоритм без перехода? Использовать можно, но в крайнем случае |
|||||||||||||
102
andrewks
28.06.11
✎
16:35
|
про баян уже говорили?
Использовать можно, но в крайнем случае |
|||||||||||||
113
wPa
28.06.11
✎
16:42
|
На 1С ни разу не пользовал. А зачем? )
Использовать можно, но в крайнем случае |
|||||||||||||
129
Волшебник
28.06.11
✎
16:54
|
(128) Я разрешаю
Использовать можно, но в крайнем случае |
|||||||||||||
131
Sk0rp
28.06.11
✎
16:55
|
Тем, кто за первый вариант. Вы на ассемблере попробуйте без jmp программу написать. Или оптимизировать рендер в 3Д движке, когда за каждый лишний обработанный полигон в секунду анус рвешь.
Для каждого инструмента есть своя область применения. Не нужно ни злоупотреблять, ни огульно хаять. Надо знать и уметь использовать. Использовать можно, но в крайнем случае |
|||||||||||||
158
GreyK
28.06.11
✎
17:06
|
(0) Хорошо хоть теорема, а не аксиома, а то эти "английские ученые" такие ученые... :)
Использовать можно, но в крайнем случае |
|||||||||||||
165
Rabbit
28.06.11
✎
17:08
|
Как только во всех ходовых языках появятся именованные циклы и break/continue [имя], так сразу метки можно будет полностью выбросить - ваять хоронилища состояний частенько напрягает.
Использовать можно, но в крайнем случае |
|||||||||||||
191
Скептик
28.06.11
✎
17:52
|
а, забыл проголосовать: 2
Использовать можно, но в крайнем случае |
|||||||||||||
199
opty
28.06.11
✎
18:17
|
Причем случай должен быть самый крайний :)
И только в черновом коде , на бело все равно без GOTO перписывать Использовать можно, но в крайнем случае |
|||||||||||||
212
NS
28.06.11
✎
18:53
|
И конечно-же.
Использовать можно, но в крайнем случае |
|||||||||||||
217
Злопчинский
28.06.11
✎
19:13
|
миллионы строк кода были наваяны на фортране в разных его инкарнациях, где использование гоуту являлось вполне обычным делом. И ничего - все работало, летало, плавало. Не то что сейчас.
. А если взять всякие спецалгоритмы на низкоуровневых языках - там вообще все завязано на сплошные гоуту - по адресам с разными типами адресации... . Использование гоуту само по себе ни плохо, ни хорошо. Все определяется тямой в голове того, кто пишет. Сколько встречал гоуту в сторонних разработках 1С - трудностей в принципе не вызывали - были к месту и вполне понятны, не то что некоторые шедевры типа GOTO М1 //перейти к М1 Использовать можно, но в крайнем случае |
|||||||||||||
240
Snovy
28.06.11
✎
22:50
|
Уже несколько раз в ветке прозвучало - возврат, прервать, попытка...исключение это самые настоящие гото. Поэтому те, кто пишут нельзя использовать, должны из принципа отказаться от использования этих операторов...
Использовать можно, но в крайнем случае |
|||||||||||||
244
vis_tmp
28.06.11
✎
23:05
|
Противники использования вдолбили себе в голову постулаты и не задумываются...
Использовать можно, но в крайнем случае |
|||||||||||||
324
miki
29.06.11
✎
05:33
|
+хожу через парадный
Использовать можно, но в крайнем случае |
|||||||||||||
326
kosts
29.06.11
✎
06:21
|
(325) Использовать исключение для обычных действий не фонтан.
- Трудности отладки (все время будет на этом месте спотыкаться). - Не ясность поведения программы в этом месте. - Не будет отловлена настоящая ошибка, например в процедуре Сформировать() По этому я все равно за GOTO, в крайних случаях. Использовать можно, но в крайнем случае |
|||||||||||||
328
Escander
29.06.11
✎
06:27
|
типа так
Использовать можно, но в крайнем случае |
|||||||||||||
329
Прохожий
29.06.11
✎
07:06
|
Иногда кривизна задачи может вполне быть компенсирована кривизной решения.
Использовать можно, но в крайнем случае |
|||||||||||||
332
_Atilla
29.06.11
✎
08:56
|
Когда надо сделать выбор между рекурсией и GOTO, я выбираю GOTO.
Использовать можно, но в крайнем случае |
|||||||||||||
335
bodri
29.06.11
✎
09:18
|
как-то так ...
хотя последний раз использовал в 7,7, лет так 8-9 назад Использовать можно, но в крайнем случае |
|||||||||||||
351
Джинн
29.06.11
✎
12:36
|
Никогда лично не использовал. Местами видел.
Использовать можно, но в крайнем случае |
|||||||||||||
366
sikuda
29.06.11
✎
13:45
|
Пистолет с последним патроном тоже должен быть на всякий случай.
Использовать можно, но в крайнем случае |
|||||||||||||
368
Goggy
29.06.11
✎
13:56
|
Клас, красота кода в УСО 1,3 :)
Глобальный поиск по "Перейти ~" найдено 1175 вхождений :) Использовать можно, но в крайнем случае |
|||||||||||||
372
sergeante
29.06.11
✎
14:20
|
"Если есть GOTO, значит это кому-нибудь надо?" (с)
Порой изящнее поставить GOTO, чем городить конструкции IF/ELSE и пр. Использовать можно, но в крайнем случае |
|||||||||||||
374
GoldenDawn
29.06.11
✎
14:30
|
если быстро накидать одноразовую обработину по корректировке какой-нибудь ботвы, то применяю, иначе считаю что такой ход выносит мозг
Использовать можно, но в крайнем случае |
|||||||||||||
407
Сергей Д
29.06.11
✎
17:32
|
Бывает, что неиспользование настолько усложняет задачу, что проще и быстрее использовать. Хотя сам уже лет 10 не пользовался.
Использовать можно, но в крайнем случае |
|||||||||||||
408
skiller3000
29.06.11
✎
21:47
|
если очень хочется то можно (c)
Использовать можно, но в крайнем случае |
|||||||||||||
409
Asirius
29.06.11
✎
22:24
|
Когда я был студентом, я оптимизировал выход из рекурсии с помощью GOTO. Жестко, на ассемблере. Вместо PUSP, POP (все параметры функции передаются через стек) банальноее GOTO и зачистка регистра стеков на расчетное количество вызовов.
Это все равно, что в 1С сделать из тела функции перейти в другую процедуру, наплевав на все параметры. Препод сначала хотел двойку за такое поставить, но потом оказалось, что мой код побил предыдущий рекорд среди его студентов в 6 раз. Задачка на обход доски шахматным конем, С 12 секунд до 2 секунд на первом пне 133. Использовать можно, но в крайнем случае |
|||||||||||||
424
pectopatop
02.07.11
✎
18:53
|
Читабельность конечно стадает, но иногда (очень редко) вместо наворотов кучи флагов/циклов и прочей байды удобнее и быстрее сделать через ГОТО
Использовать можно, но в крайнем случае |
|||||||||||||
445
vudo
07.07.11
✎
13:13
|
Использовал метки в обработке подключения торгового оборудования. Связано было с тем, что касса свои порты опрашивает в цикле, и если ВК не попадала, то связь не получалась... Также могла отвалится по тайм-ауту и приходилось переподключаться. Метки позволили избежать многократного повторения отдельных участков кода. Я просто накручивал счетчик ошибок и перемещался к нужной метке для следующего процесса подключения. Код стал прост и понятен, несмотря на использования меток, а было черт ногу сломит!
Использовать можно, но в крайнем случае |
|||||||||||||
451
Reset
07.07.11
✎
13:20
|
Не помню, отвечал или нет на голосовалку.
При реальной необходимости использовать можно. Но это возникает чрезвычайно редко. Совершенно не помню, когда использовал последний раз, наверное в школе на gw basic (это было Очень давно :) ). Использовать можно, но в крайнем случае |
|||||||||||||
454
Torquader
07.07.11
✎
13:49
|
Если рассматривать язык 1С как язык программирования, то в нём без Goto приходится сильно извращаться, так как:
- Нет стандартного цикла Do {Тело} Loop While {Условие}, а писать While 1=1 ещё более глупо, чем Goto. - Нет возможности выхода сразу из нескольких циклов. Приходится или писать Goto за пределы цикла (что очень неудобно из-за необходимости вводить метки и задавать им имена) или выносить циклы в отдельную процедуру, чтобы использовать Return (что тоже не всегда удобно и сильно усложняет читаемость). - Возможность повторения кода с начала после устранения ошибки. Тут или Goto или "вечный цикл" и Continue (не знаю, но применение Goto выглядит более понятным, чем цикл). Поэтому, если и используется Goto, то нужно писать комментарий, чтобы было понятно, где у нас находится метка. Использовать можно, но в крайнем случае |
|||||||||||||
522
Ms Test
13.07.11
✎
17:44
|
(506) +1 :)
Использовать можно, но в крайнем случае |
|||||||||||||
527
Господин ПЖ
13.07.11
✎
18:25
|
я один раз использовал - доктор, я буду жить?
Использовать можно, но в крайнем случае |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |