Имя: Пароль:
IT
Наука
Теорема Бома — Якопини реалистична? или снова про goto
, , , ,
0 MatrosoV AleXXXand_R
 
28.06.11
15:32
1. Использовать можно, но в крайнем случае 46% (42)
2. Да, GOTO - нельзя использовать 38% (35)
3. Другое 9% (8)
4. Лучше использовать, чем чаще, тем лучше 7% (6)
Всего мнений: 91

Теорема Бома — Якопини — утверждение о структурном программировании, согласно которому любой исполняемый алгоритм может быть преобразован к структурированному виду, то есть такому виду, когда ход его выполнения определяется только при помощи трёх структур управления: последовательностей (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
я один раз использовал - доктор, я буду жить?

Использовать можно, но в крайнем случае