Вход | Регистрация
    1  2  3  4   
Информационные технологии :: Математика и алгоритмы

Используете Goto (переход по метке)?

Ø [Волшебник, 09.12.20 - 10:48]
Используете Goto (переход по метке)?
Я
   Zapal
 
04.12.20 - 10:32
4. нет! Код должен быть идеален!46% (26)
3. почти никогда, но пару раз было30% (17)
1. да! Свободно и без ограничений18% (10)
2. да, но только когда никто не видит7% (4)
Всего мнений: 57

немного предыстории, возможно кто-то не в курсе. Считается что использование этой конструкции показывает низкое качество кода. В некоторых языках его просто запретили

написал вот я его недавно и задумался - я один такой плохой или нас много? Насколько это явление вообще распространено в одинэсной среде? В типовых вроде не припомню, возможно им там тоже запретили

и да, давайте сразу договоримся - Прервать, Продолжить и Возврат это другое, здесь нет смысла делать опросы, их используют все. Речь конкретно о команде Перейти
   ДенисЧ
 
1 - 04.12.20 - 10:32
5. Если очень хочется.
   Noser2020
 
2 - 04.12.20 - 10:35
(0) Каждый день. Как же без него?

1. да! Свободно и без ограничений
   Документовед
 
3 - 04.12.20 - 10:36
Один раз было. Несколько вложенных циклов из которых надо было выйти прервав выполнение.

3. почти никогда, но пару раз было
   Noser2020
 
4 - 04.12.20 - 10:36
>В типовых вроде не припомню, возможно им там тоже запретили
В УПП 1.0 было, в паре отчётов (которые частично мимо построителя отчетов работали).
Вообще, это явно запрещено стандартами кодирования.
   VladZ
 
5 - 04.12.20 - 10:37
Не использую.
Считаю, что можно использовать в случаях, когда по-другому никак. Там, где можно отказаться от "перейти" - нужно отказаться.

3. почти никогда, но пару раз было
   Dzenn
 
6 - 04.12.20 - 10:37
GoTo - избитый фетиш программистской цивилизации, и его нужно уважать. Использую в двух случаях - 1) при настроении "гото", очень редко 2) при выходе из вложенных циклов.

3. почти никогда, но пару раз было
   Lokli
 
7 - 04.12.20 - 10:38
Не использую. И даже не пытаюсь... :)

4. нет! Код должен быть идеален!
   Noser2020
 
8 - 04.12.20 - 10:39
к (4) на тему запрета - оказывается наврал, только "не рекомендуется"
https://its.1c.ru/db/v8std/content/547/hdoc
   acht
 
9 - 04.12.20 - 10:39
(8) Второй пункт там же дочитай
   Bigbro
 
10 - 04.12.20 - 10:39
ни разу не понадобился )
хотя мой код далек от идеала))

4. нет! Код должен быть идеален!
   ads55
 
11 - 04.12.20 - 10:39
При отладке, чтобы сразу перейти к нужной строке :)
Но в готовом решении - нет.

3. почти никогда, но пару раз было
   Garykom
 
12 - 04.12.20 - 10:40
Не помню чтобы использовал уже лет 20
   ДенисЧ
 
13 - 04.12.20 - 10:40
(9) Веб-клиент - это отдельная пестня
   elCust
 
14 - 04.12.20 - 10:40
Не довожу логику программы до необходимости применения "Goto".

5. Мне не нравится голосовался ТС. Поэтому свой выбор.
   acht
 
15 - 04.12.20 - 10:42
(13) Чойта?
   Галахад
 
16 - 04.12.20 - 10:44
Выполнить.

Даже не знаю как тут можно без меток.

1. да! Свободно и без ограничений
   Noser2020
 
17 - 04.12.20 - 10:46
(0) Если серьёзно, goto - это, конечно, очень яркий индикатор законченного быдлокодера (Другой вопрос что на java, например, его просто нет).
Но кому какое дело, ты ведь 1Сник, а не программист - так что пиши как удобнее, быстрее и пр.
Будет мешать - перепишешь (ну или кто-нибудь другой, кому будет мешать).
P.S. Прямо вот пятничные посиделки в кафе (не помню как называлось) на чистых прудах вспомнились ;)
P.P.S. Если что я не то чтобы серьезно, но и не совсем шучу.
   Dzenn
 
18 - 04.12.20 - 10:46
А кстати, зачем рассказывать без примеров?) ВЫКЛАДЫВАЙТЕ СКРИНШОТЫ! :-)
   ДенисЧ
 
19 - 04.12.20 - 10:47
(15) Тойта.
   Андрей_Андреич
 
20 - 04.12.20 - 10:48
В далекой юности первый курсовой на Фортране рассыпал перфокарты. Собрал с распечатки, но ГоТо и метку перепутал местами. Программа зациклилась. Искал ошибку 2 недели по неопытности.

4. нет! Код должен быть идеален!
   ДенисЧ
 
21 - 04.12.20 - 10:48
(17) @на java, например, его просто нет@
Зато есть break label. Что ничем не лучше
   ДенисЧ
 
22 - 04.12.20 - 10:49
(18) Друг просит?
   mikecool
 
23 - 04.12.20 - 10:49
пользовался, когда учился писать на 1с, ибо был глуп и неопытен

4. нет! Код должен быть идеален!
   Paint_NET
 
24 - 04.12.20 - 10:50
Не использовал.
Считаю, что его применение - костыль, когда лень нормально код переписать. Можно, но не стоит.
   Lama12
 
25 - 04.12.20 - 10:50
(17) Ну Java вообще какой-то кастрированный язык. ИМХО конечно. И как же без break с меткой?
(0) пока не сталкивался с ситуацией которую нельзя обойти без GoTo. Конечно иногда это получается громоздкий код, но зато сквозной.

4. нет! Код должен быть идеален!
   pudher
 
26 - 04.12.20 - 10:51
Где пункт Своё? Я вот не использую, потому, что нет необходимости, а не потому, что код должен быть идеален.
   Aleksey
 
27 - 04.12.20 - 10:51
(17) Ты сейчас писателей типовых быдлокодерам назвал? А ты азартен, Парамоша!
   ptiz
 
28 - 04.12.20 - 10:52
Нет, конечно. В 1С 9.0 его быть не должно!

4. нет! Код должен быть идеален!
   timurhv
 
29 - 04.12.20 - 10:53
Видел только при обфускации кода.
Если человек использует его, то либо проблема с мышлением, либо лень поправить сложную конструкцию / разовая задача (тут вопрос целесообразности потраченного времени).

4. нет! Код должен быть идеален!
   Noser2020
 
30 - 04.12.20 - 10:53
(21)
>Зато есть break label. Что ничем не лучше
Согласен.
И встречается он на удивление (для меня) часто - видел в netty и jackson'е (понятно, может он в каждой второй библиотеке - но специально я всё-таки не искал ;)
 
 Рекламное место пустует
   Noser2020
 
31 - 04.12.20 - 10:57
> Ты сейчас писателей типовых быдлокодерам назвал?
Как минимум в массе своей goto в современных типовых нет, а может и вообще нет (да и в не современных особо не было).
Специально не искал, конечно, но не могу представить чтобы такое "простили" ;)
Речь, конечно. про "основные" типовые от фирмы 1С.
   ReaLg
 
32 - 04.12.20 - 10:57
Когда только познакомился с программированием в школе - писали на бейсике на БКшках.
Там, вроде бы использовали GO TO.

Потом в универе уже была парадигма - GO TO использовать не надо. Ну, я как бы и привык, никогда не использовал.

Но недавно нужно было решить специфическую задачку - я покопался в инете и нашел реализацию алгоритма на VB. Как раз с кучей GO TO.

Ну и наплевался же я при переносе/дебаге.
Реально как с другой планеты код.
Я понимаю, что это просто другая парадигма/другой стиль, но очень непривычно и я бы не хотел в таком копаться все время :)

3. почти никогда, но пару раз было
   Aleksey
 
33 - 04.12.20 - 11:00
(31)
Т.е. ты не искал, но точно знаешь. Ну ну... БП Проф/Корп 3.0.83.37 - найдено 24 раза
   fisher
 
34 - 04.12.20 - 11:03
Пару раз было.

3. почти никогда, но пару раз было
   Noser2020
 
35 - 04.12.20 - 11:03
(33)
>БП Проф/Корп 3.0.83.37 - найдено 24 раза
Ну что сказать - я был не прав. Прошу прощения.
Думал про них гораздо лучше.
   lubitelxml
 
36 - 04.12.20 - 11:04
Было как-то на 7.7, можно обойтись без этого

3. почти никогда, но пару раз было
   Mikeware
 
37 - 04.12.20 - 11:06
(31) В ЗиКе каком-то было. Но зик вообще "неочевидная штука"
   Aleksey
 
38 - 04.12.20 - 11:10
КА - 11 раз

В современных типовых он встречается в одном единственном отчете - РегламентированныйОтчетПрибыльИностраннойОрганизации

Поэтому в БП, КА, ЕРП, т.е. там где этот отчет есть, есть и перейти.
А в УТ, ЗУП, УНФ - обошлись без перейти
   1Сергей
 
39 - 04.12.20 - 11:14
Бить линейкой по пальцам за GOTO
                    (c) Ада Лавлейс
   Малыш Джон
 
40 - 04.12.20 - 11:16
Фуфуфу! Вы же потом этими руками хлеб едите!

4. нет! Код должен быть идеален!
   Zapal
 
41 - 04.12.20 - 11:16
мое мнение - бывают ситуации когда этот переход сильно упрощает код, а значит делает его более надежным

понятно что если очень захотеть то можно всё это засунуть в пару вложенных циклов или еще как-то, но от этой правильности и принципиальности больше вреда чем пользы если оно начинает создавать трудности

и да, всем которые "строго нет" - не забывайте про "Прервать, Продолжить и Возврат" которые суть тоже самое и которые вы по-любому пользуете

3. почти никогда, но пару раз было
   fisher
 
42 - 04.12.20 - 11:21
(41) Очень странно равнять "Прервать, Продолжить и Возврат" с гоуту. Эти конструкции не мешают создавать хороший код.
А все разы, когда я использовал гоуту (на пальцах одной руки пересчитать) - это были костыли для костыльной логики. Которой по-хорошему не должно было быть, но это был вопрос меньшей крови.
   sr77
 
43 - 04.12.20 - 11:21
1

1. да! Свободно и без ограничений
   Zapal
 
44 - 04.12.20 - 11:24
(42) а я и не писал что мешают, я писал это они то же самое. Прерывают ход программы и перемещают её выполнение куда-то вдаль
по канонам идеального вместо Прервать ты должен написать условие и всю оставшуюся часть цикла засунуть в него
   ДенисЧ
 
45 - 04.12.20 - 11:24
(39) Величайшей ошибкой было бы думать. (с) В.Ульянов
   fisher
 
46 - 04.12.20 - 11:25
(42) + Другими словами, код с использованием гоуту не может быть хорошим. Но в некоторых кривых случаях хороший код написать не получается.
   Волшебник
 
47 - 04.12.20 - 11:28
Профессиональному программисту разрешается использовать:

Перейти ~метка

запросы в цикле

Исключение КонецПопытки; без вывода текста ошибки.

литералы '00010101' и 86400 и другие коды символов

комментарии в тексте запроса
   acht
 
48 - 04.12.20 - 11:28
А еще вместо goto можно использовать выбрасывание исключений и их перехват =)
   Волшебник
 
49 - 04.12.20 - 11:29
(48) Это точно. Можно даже делить на ноль.
   ДенисЧ
 
50 - 04.12.20 - 11:30
(46) "код с использованием гоуту не может быть хорошим"
Код и без использования перехода может быть нехорошим.

Так что переход тут - совершенно незначащая величина =>0
   fisher
 
51 - 04.12.20 - 11:30
Вдруг кто-то еще не читал: http://catalog.mista.ru/1c/articles/966234/
   Волшебник
 
52 - 04.12.20 - 11:31
(44) Это увеличит глубину вложенности и усложнит понимание программы.

А вот фраза "Перейти ~Выход;" будет непонятна только дебилам.
   mdao
 
53 - 04.12.20 - 11:32
Как то неучтиво называть системных asm прогов быдлокодерами

3. почти никогда, но пару раз было
   Zapal
 
54 - 04.12.20 - 11:32
(48) точно, еще исключения
   Zapal
 
55 - 04.12.20 - 11:33
(52) ты голосуй, не стесняйся
пару раз терял уже девственность с этими метками? признавайся
   PR
 
56 - 04.12.20 - 11:34
(0) Сжечь ведьму!
   Волшебник
 
57 - 04.12.20 - 11:35
(55) Лично я их не использую, но я не ограничиваю себя.
Выход из глубокого вложенного цикла сразу на верхний уровень можно реализовать только меткой.
Выход на конец процедуры тоже приветствую. Это лучше, чем пачка выходов, разбросанных по тексту процедуры.
   fisher
 
58 - 04.12.20 - 11:36
(44) Прервать и Продолжить и Возврат - делают переходы без потери контекста.
   Zapal
 
59 - 04.12.20 - 11:36
но вообще я согласен с (47)
эти правила придумали чтобы молодежь не косячила, уберечь от основных ошибок так сказать. Если человек осознаёт последствия то он волен делать то что считает нужным
   alkorolev
 
60 - 04.12.20 - 11:39
использую для алгоритмов, исполняемых через оператор "Выполнить", чтобы не путаться в ветвистых условиях. В данном случае Перейти ~Выход - аналог "возврата"

2. да, но только когда никто не видит
 
 Рекламное место пустует
   Волшебник
 
61 - 04.12.20 - 11:39
(59) Однозначно.
   fisher
 
62 - 04.12.20 - 11:40
(50) Я стараюсь писать хороший код. И когда у меня это получается - гоуту там нет. А вот когда приходится выбирать между видами плохого кода, то в некоторых случаях плохой код с гоуту может выглядеть получше, чем плохой код без него.
   Noser2020
 
63 - 04.12.20 - 11:41
(57)
>Выход из глубокого вложенного цикла сразу на верхний уровень можно реализовать только меткой.
Обычно это значит что стоит вынести вложенный цикл в отдельную функцию.
Бывает лень, конечно.
Но современные IDE это существенно упрощают.

>Это лучше, чем пачка выходов, разбросанных по тексту процедуры.
Есть ещё подход "раннего возврата" (см. например https://medium.com/swlh/return-early-pattern-3d18a41bba8)
Мне нравится существенно больше чем писать "правильный" код по Дейкстре с миллионом вложенных scope'ов.

Ну и "просто оставлю это здесь":
https://ru.wikipedia.org/wiki/Considered_harmful
   Волшебник
 
64 - 04.12.20 - 11:44
(47)+ Добавлю что ещё разрешается профессиональному программисту:

комментирование кусков программы

отсутствие комментариев понятного программного кода

динамическое конструирование запросов, которые не открываются в Конструкторе

звёздочка в запросах

обращение к реквизитам через точку

поиск по полям без индексов

и другие интересные вещи
   fisher
 
65 - 04.12.20 - 11:53
"Разрешено" то оно конечно "разрешено". Только если он этим злоупотребляет, то никакой он в жопу не профессиональный программист.
   Волшебник
 
66 - 04.12.20 - 11:53
(65) Разумеется.
   trooba
 
67 - 04.12.20 - 11:55
Я пару раз использовал, совсем недавно и, как щас помню 10-11 лет назад. Когда цикл в цикле около 10 раз и нужно сэкономить время и уйти в конец функции...

3. почти никогда, но пару раз было
   polosov
 
68 - 04.12.20 - 11:56
(64) Ну так-то можно еще стековую машину 1С использовать напрямую
   Zapal
 
69 - 04.12.20 - 12:01
(64) запросы которые не открываются в конструкторе это прям зло злое
я сейчас никогда такое не делаю, разве что по-молодости может
   Ненавижу 1С
 
70 - 04.12.20 - 12:03
(57) "Выход из глубокого вложенного цикла сразу на верхний уровень можно реализовать только меткой."
можно организовать метод со всеми этими циклами и вместо goto использовать return
   Fish
 
71 - 04.12.20 - 12:15
(70) Возврат вернёт тебя из процедуры. А когда нужно остаться в процедуре и выйти только из цикла - тогда только Перейти.
   Волшебник
 
72 - 04.12.20 - 12:16
(70) "Возврат" в глубине процедуры — зло.
   Ненавижу 1С
 
73 - 04.12.20 - 12:17
(71) еще раз - засовываешь это код в ОТДЕЛЬНЫЙ метод и выходишь из него, если надо
(72) если метод создан специально для этого, то не думаю, что зло
   Ненавижу 1С
 
74 - 04.12.20 - 12:19
(72) зло это процедуры длиннее одного экрана, тут уж действительно и возврат в глубине зло и все остальное
   trdm
 
75 - 04.12.20 - 12:20
Продолжить, прервать - это частные случаи goto.
Инструмент есть инструмент.
Можно конечно понтоваться, что пишещь без гоуту, но это просто понты и не более.

1. да! Свободно и без ограничений
   Волшебник
 
76 - 04.12.20 - 12:26
(73) Профессиональному программисту можно и так:

Попытка

  Выполнить "Модуль = ОбщийМодуль.Брандашмыг";

Исключение // Брандашмыг ещё не подключили

  Модуль = ОбщийМодуль.Гейзенбаг;

КонецИсключения;
   bolder
 
77 - 04.12.20 - 12:29
(0) What?Пятничная тема детектед)

4. нет! Код должен быть идеален!
   Ненавижу 1С
 
78 - 04.12.20 - 12:30
(76) не могу запретить
   MWWRuza
 
79 - 04.12.20 - 12:37
Иногда, при написании чего-то "через чур замороченного", бывало, использовал(например, была задача, не учетная, по спорту, "очень хитрая" жеребьевка), в процессе написания алгоритма, проще и быстрее было так сделать, но, потом, когда все относительно правильно заработало - "причесал код", и по убирал все безусловные переходы.

3. почти никогда, но пару раз было
   Доктор Манхэттен
 
80 - 04.12.20 - 17:41
(0) Стараюсь не использовать никакие операторы изменения хода программы. Ни GoTо, ни Прервать, Продолжить и Возврат.
Условия тоже стараюсь не использовать если это функция, а не процедура. Переменные тоже лучше избегать, а использовать только константы, то есть переменные, которые инициализированы только один раз в месте, где они были объявлены.
   Доктор Манхэттен
 
81 - 04.12.20 - 17:45
Голосую

4. нет! Код должен быть идеален!
   rphosts
 
82 - 04.12.20 - 18:00
Когда-то на васике... ну и на асме но там не гото а джамп!

3. почти никогда, но пару раз было
   Конструктор1С
 
83 - 04.12.20 - 18:01
(0) как только в программировании появились методы (процедуры/функции по 1сному), гото автоматом изжил себя

4. нет! Код должен быть идеален!
   ShAV
 
84 - 04.12.20 - 18:16
Когда-то очень давно прочитал где-то убедительные доводы, что переходы в коде это не кошерно. И с тех пор не использовал. Было, правда, использовал в школе на занятиях на Бейсике в 1990 примерно, но это не в счет :)

4. нет! Код должен быть идеален!
   ДенисЧ
 
85 - 04.12.20 - 18:33
(84) Ой, ви таки из наших ? ))
   NorthWind
 
86 - 04.12.20 - 18:50
(0) последние лет 25 как-то не было необходимости.

4. нет! Код должен быть идеален!
   Сергиус
 
87 - 04.12.20 - 19:37
Честно говоря, в голову даже не приходят случаи, где он нужен настолько, что нельзя обойтись другим.
   vde69
 
88 - 04.12.20 - 19:48
я даже на микроконтроллерах на "С" не использую...

4. нет! Код должен быть идеален!
   Eeeehhhh
 
89 - 04.12.20 - 21:01
Совсем недавно пришел новый клиент - отгрузка стала. Зашел горе программист не учел нескольких условий и они всплыли в момент пика отгрузки. Варианта было 2 или переписать всю процедуру (долго час - полтора) или для этих условий перескочить на метку дальнейшего исполнения. Решил не тормозить людям отгрузку сделал гото.
Правда потом когда пришли с другой задачей переписал процедуру. Гото грех (88) а на мк стиль программирования )))

2. да, но только когда никто не видит
   Злопчинский
 
90 - 04.12.20 - 21:29
Удивлю: у меня есть код. в нем есть гото. и, о блин - он работает кучу лет. и суко, не сломался еще...
;-)

2. да, но только когда никто не видит
   Злопчинский
 
91 - 04.12.20 - 21:31
как блин я пролграммировал на ассемблере где конструкция BR 14 - одна из основополагающих...
   NorthWind
 
92 - 04.12.20 - 21:46
(87) ну на асме, например, вы без джампов обойдетесь вряд ли.
   Доктор Манхэттен
 
93 - 04.12.20 - 21:48
(92) Если на объектно-ориентированном асме, то никаких джампов не нужно.
   jbond
 
94 - 04.12.20 - 21:57
В то время, когда в айти банков обсуждаются паттерны разбиения монолитов на микросервисы при котором можно избежать антипаттерт Макросервис, а в соседнем ртделе обсуждают дропинг саппорта Кубером Докера, 1Сники обсуждают использование оператора  бейсика goto, который в последний раз использовался в 1993 году
   youalex
 
95 - 04.12.20 - 22:01
Последний раз использовал на бейсике Спектрума.
И да, GOTO это как реквизит комментарий.
реквизит комментарий часто говорит о том, что в объекте реально недостает какого-то реквизита.
GOTO  - сигнализирует о том, что пора разобрать свое любимое спагетти на аккуратные функции.
   youalex
 
96 - 04.12.20 - 22:01
Собственно, вот:

4. нет! Код должен быть идеален!
   dmpl
 
97 - 04.12.20 - 22:07
(0) Только вот честно - уже и не помню, когда в последний раз была ситуация, когда эта конструкция могла бы потребоваться на ЯВУ. А так - был бы смысл - использовал бы. Как, например, в Ассемблере.

1. да! Свободно и без ограничений
   Доктор Манхэттен
 
98 - 04.12.20 - 22:10
(94) Прикинулся как будто знаешь много умных слов, но тут многие понимают эти слова, так что ты лоханулся.
   dmpl
 
99 - 04.12.20 - 22:14
(41) Прервать, Продолжить и Возврат, все же,  не позволяют "заскочить" в произвольное место в том же вложенном цикле, что GOTO позволяет.
   dmpl
 
100 - 04.12.20 - 22:18
(44) С помощью GOTO ты можешь вернуть управление на 10 строчек назад, например. И обычно он используется как раз тогда, когда другими конструкциями не получается передать управление в нужное место. Именно поэтому GOTO и не рекомендуется, что для тех случаев, когда его использование было бы оправдано, уже есть отдельные конструкции.
  1  2  3  4   

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.