Имя: Пароль:
1C
1С v8
Использование GoTo (Перейти): плохо или хорошо?
🠗 (Волшебник 25.11.2024 13:09)
0 formista2000
 
14.11.24
12:59
Привет!
Среди вложенных условий и циклов уместно ли использовать оператор Перейти для выхода из этого леса? Или это дурной тон и надо переписывать алгоритмы и условия?
169 mmg
 
17.11.24
16:01
(166) Революция, между прочим, уже идет. Новый язык программирования - естественный человеческий. И это принципиальный шаг вперед
170 Djelf
 
гуру
17.11.24
17:01
(169) И как там решается вопрос, в этой супер-пупер революции, по поводу "казнить нельзя помиловать"?
171 Волшебник
 
17.11.24
17:23
(169) Кстати, в нём есть Go To...
Epic Fail...
172 mmg
 
17.11.24
17:48
(170) В чем вопрос? Сформулируйте внятно
173 Tarzan_Pasha
 
17.11.24
17:51
Я поверил, в то, что GoTo использовать нельзя когда после бейсика начал изучать паскаль в 10-11 классе и Си на первом курсе.  Но когда мы начали изучать ассемблер, в котором всё строится на условных и безусловных переходах, то запутался.  мне и try .. catch не нравится.

Раньше всё было четко:  Программа должна иметь один вход и один выход.  

Сейчас про GoTo вообще нет смысла задумываться. Всё решает архитектура. Но я не использую нигде этот оператор перехода.
174 Волшебник
 
18.11.24
09:44
(173) Надо знать все конструкции языка, на котором активно пишешь. Да, можешь не использовать, но если вдруг встретится, то будешь знать, что это такое и куда дальше смотреть.

Вот я по себе вспоминаю, что мне не нравилось:
- процедуры/функции
- запросы SQL
- попытки...исключения
- классы/неймспейсы
- лямбды (стрелочные функции)
- AJAX
- оформление через CSS
- языки конфигурационных файлов
- отдельный язык jQuery
- регулярные выражения
- слоистая архитектура
- MVC-архитектура
- блочная вёрстка

Зато теперь всё применяется в движке форума. И даже присутствует блочная вёрстка местами.
175 Ненавижу 1С
 
гуру
18.11.24
09:44
(174) легче было перечислить, что нравилось, похоже
176 Волшебник
 
18.11.24
09:46
(175) запросы в цикле
177 Ненавижу 1С
 
гуру
18.11.24
09:56
(176) ну хорошо не наоборот )))
178 Волшебник
 
18.11.24
09:57
(177) Все запросы разворачиваются в циклы, чтобы Вы знали.
179 Ненавижу 1С
 
гуру
18.11.24
10:51
(178) внутри машины условные и безусловные джампы. Но ребята, это же не значит, что в высокоуровневом программировании надо такое писать
180 Garikk
 
18.11.24
10:53
(173) <Я поверил, в то, что GoTo использовать нельзя когда после бейсика >

Ты писал на бейсике после которого его использование стало плохим? ты в курсе что он в середине 80х (именно тот самый бейсик) устарел, и претензии к goto стали неактуальны?

сейчас практически ни одного языка нельзя найти (кроме си разве что) где тот старорежимный goto можно использовать, ассемблер не считаем
181 Волшебник
 
18.11.24
10:56
(179) Ваше "высокоуровневое" скоро станет "низкоуровневым", потому что все перейдут на языки промтов, написанных простым человеческим языком, а в нём есть "Перейти".
182 Eiffil123
 
18.11.24
13:06
(178) даже "ВЫБРАТЬ 1" ?
183 Волшебник
 
18.11.24
13:11
(182) Конечно. Это цикл с известным числом повторений.
Для н=1 По &ПервыеСколько Цикл
   ...
КонецЦикла;


или
Пока НабраноЭлементов < &ПервыеСколько Цикл
   ...
   НабраноЭлементов = НабраноЭлементов + 1;
КонецЦикла;


или
Пока Истина Цикл
   НабраноЭлементов = НабраноЭлементов + 1;
   ...
   Если НабраноЭлементов >= &ПервыеСколько Тогда 
      Прервать; 
   КонецЕсли;
КонецЦикла;
184 Волшебник
 
18.11.24
13:21
Цикл "Для" является синтаксическим сахаром для цикла "Пока (условие) Цикл".

Цикл "Пока (условие)" является синтаксическим сахаром для бесконечного цикла "Пока Истина Цикл... Если (условие) Прервать".

Бесконечный цикл является синтаксическим сахаром для "условного GoTo (jump if)":

JE - переход если равно
JNE - если не равно
JAE, JNB - если больше или равно
JNAE, JB - если меньше
JA, JNBE - если больше
JNP, JPO - если нечетное
JP, JPE - если четное (PF)
JZ - если ноль
JNZ - если не ноль
JNS - если больше нуля
JS - если меньше нуля (SF)
JC - если установлен флаговый регистр CF
185 Ненавижу 1С
 
гуру
18.11.24
13:28
(184) Правильно! Пора вернуться к корням! Напридумывали тут... Только ассемблер! Лучше конечно сразу машинный код
186 Волшебник
 
18.11.24
13:33
(185) Машинный код? А программирование путём переключения проводов не хотите ли?!


ENIAC, 1946 г

Машинный код ещё надо разработать! В 1948 году фон Нейман упростил программирование для ENIAC, ввёл хранение программы в памяти и jump-return
187 Eiffil123
 
18.11.24
14:19
(184) для организации циклов есть команда LOOP со счетчиком на регистре CX. Если учитывать то, что приведенные выше команды ассемблера порождают разные машинные коды, то называть это синтаксическим сахаром не очень то корректно
188 Волшебник
 
18.11.24
14:32
(187) Разные конструкции синтаксического сахара может порождать разные коды после компиляции в машинный код или промежуточный. Иногда компилятор даже разворачивает циклы в последовательность, чтобы было быстрее.

Сами циклы — это синтаксический сахар для очень длинной последовательности.
189 Eiffil123
 
18.11.24
14:37
(188) ну тогда почти всё в программировании синтаксический сахар
190 Волшебник
 
18.11.24
14:41
(189) Так и есть. Поэтому не надо запрещать кушать коричневый сахар типа GoTo, если Вы привыкли к белому рафинаду. Коричневый — это, может, тростниковый. Он вполне может оказаться зожным-зожным.
191 АгентБезопасной Нацио
 
18.11.24
14:48
Проблемы не с самим безусловным переходом, а с его без[д]умным использованием. Даже на фортране, да и ассемблерах (и 80/z80, и М11, и 48/51), после "осмысления" метода структурного программирования, использование переходов изменилось на столько, что по сути это было "неиспользование goto", хотя команд перехода ("jmp","br","*jmp") в коде было дофига.
И я даже не и помню, когда был необходим безусловный переход в 1с, и в с/с++. Не натыкался на такую ситуацию. Даже в реализации конечных автоматов.
(187) НЯП, loop это "счетный цикл", а циклы счетным не ограничиваются. Хотя на 86 асме я почти не писал...
192 АгентБезопасной Нацио
 
18.11.24
14:49
(190) не всё то сахар, что коричневое...©
193 Волшебник
 
18.11.24
14:51
(192) Я так и знал, что будут такие аллюзии
194 АгентБезопасной Нацио
 
18.11.24
14:51
(193) в оригинале было про шоколад...
195 VS-1976
 
18.11.24
15:00
(184) цикл есть в в assembler

Mov cx,10

Метка
...
Loop Метка
196 АгентБезопасной Нацио
 
18.11.24
15:02
(195) ассемблеры бывают разные...
197 VS-1976
 
18.11.24
15:04
Я лично не вижу проблем с goto, если нет злоупотреблений и он упрощает код. Типа зачем много проверок, когда можно выскочить из циклов. Но за злоупотребление нужно отстреливать, так как затрудняет читаемость кода.
198 VS-1976
 
18.11.24
15:06
(196) для z80 также есть цикл
199 Волшебник
 
18.11.24
15:08
(197) Тоже не вижу никакой проблемы в разумном использовании GOTO, например, раз в полгода. Откуда эти холиварщики берутся? Наверное, это всё чайники, начитавшиеся Дейкстры, Вирта, и так и не вышедшие за пределы студенческих учебников.

200 Конструктор1С
 
18.11.24
15:13
(190) а может сразу послать здравый смысл, и писать в двоичном коде?
201 maxab72
 
18.11.24
15:14
Главное, чтоб не сделали goto обязательным, со сдачей отчетности... и повышенным соцобязательствами по его использованию  в народном хозяйстве.
202 Волшебник
 
18.11.24
15:19
(200)
copy con program.exe
203 Eiffil123
 
18.11.24
15:39
раньше программистам запрещали использовать goto, а теперь запрещают запросы в цикле
204 Волшебник
 
18.11.24
15:46
(203) Да-да. Откуда только берутся эти безумные запреты?
205 maxab72
 
18.11.24
15:53
(203) а еще обращаться к реквизитам ссылки через три точки...
206 Волшебник
 
18.11.24
16:04
(205) Тоже не понимаю. Ну обратись, если надо. Платформа сама добавит соединения.
Нет же. Некоторые сами вручную пишут эти соединения, лишь бы не было этих трёх точек. Ругают же...
207 VS-1976
 
18.11.24
20:23
(205) можно, если реквизит не составной, хотя если обращение одно, то можно закрыть глаза. Если в запросе, то для реквизита составного можно использовать "выразить". А иногда даже полезна точка, чтобы не писать все соединения, а реквизит к примеру общий. Проблема не в точках, а в том, что ты понимаешь что творишь. А это требует понимания что происходит под капотом.
208 Chai Nic
 
19.11.24
08:23
Надо было запретить изначально обращение через точку от реквизита составного типа.

Вместо этого лучше бы ввели новую сущность "классы объектов" с общими реквизитами для всего класса. Создал класс "Документы расчетов с контрагентами", и там был бы общий реквизит "Контрагент", например. И множественное наследование, само собой, при описании конкретного вида объекта.

И реквизиты класса бы хранились в отдельной таблице "объекты класса", с ключом-ссылкой объекта. Никакого дублирования и никаких монстровидных запросов с объединением кучи таблиц.

Но это конечно уж слишком круто. Почти ООП.
209 Волшебник
 
19.11.24
09:26
(208) Наследование — отстой. Гранды мирового ООП уже отказываются от наследования в пользу композиции и интерфейсов.

Implementation inheritance is controversial among programmers and theoreticians of object-oriented programming since at least the 1990s. Among them are the authors of Design Patterns, who advocate interface inheritance instead, and favor composition over inheritance.
https://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)#Issues_and_alternatives

Наследование реализации является спорным вопросом среди программистов и теоретиков объектно-ориентированного программирования, по крайней мере, с 1990-х годов. Среди них есть авторы шаблонов проектирования (Design Patterns), которые выступают за наследование интерфейса и предпочитают композицию наследованию.
210 Тихий омут
 
19.11.24
09:47
(198) DJNZ. А, не - LDIR/LDDR - во моща!
211 Конструктор1С
 
19.11.24
11:18
(208) махровое дублирование в пофигураторах не из-за отсутствия ООП, а из-за низкой культуры разработки среднего 1сника. С ООП станет только хуже
212 Конструктор1С
 
19.11.24
11:20
(209) зато полиморфизм с инкапсуляцией стали рулить ещё сильнее
213 Eiffil123
 
19.11.24
11:52
(208) ну это концепция не классов, а скорее интерфейсов
214 Chai Nic
 
19.11.24
12:51
(213) Тут класс в смысле классификации, а не в том, в каком это принято в ООП
215 petr_ivanov
 
21.11.24
17:25
(206) "Тоже не понимаю. Ну обратись, если надо. Платформа сама добавит соединения.
Нет же."


прошу ликбеза. я слышал, причем не один раз,что если обратиться с точкой, то это приведет к получению всех полей в левом соединении. или это к запросам не относится, а только из кода?

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

с точки зрения производительности разве вариант без точки не будет более выигрышным, чем с точкой?
216 Волшебник
 
21.11.24
17:41
(215) Сделайте замер производительности и доложите.
217 1Снеговик
 
гуру
21.11.24
17:51
(0) можно, но чтобы никто не видел. Особенно на собеседовании.
218 Eiffil123
 
21.11.24
17:52
(215) про запросы была такая версия, что оптимизатор запросов крайне тупой, и если ты обращаешься к реквизитам одного и того же поля через точку несколько раз, то на каждую точку он делает левое соединение.

другие говорят что это всё чепуха
219 petr_ivanov
 
21.11.24
18:08
(216) на большой базе проверить возможности нет, а на моей разницы не будет

(218) т.е. это именно что версия? а официальная информация какая-нибудь есть?

в общем, я правильно понимаю, что в запросах через точки обращаться, если нужна информация о полях ссылочных полей - это нормально?
220 Волшебник
 
21.11.24
18:11
(218) это чепуха
(219) нормально
221 petr_ivanov
 
21.11.24
18:19
(220) спасибо!
222 Eiffil123
 
22.11.24
10:04
(219) на мой взгляд, читаемость запроса очень часто важнее этой мнимой оптимизации. Поэтому обращаться через точку можно, если ваш запрос не создает проблем со скоростью или ресурсами.
223 Волшебник
 
22.11.24
16:08
Свежая статья на тему:
https://habr.com/ru/companies/piter/articles/860558/

Есть примеры, как правильно обращаться с Goto
224 Конструктор1С
 
23.11.24
04:54
(223) правильное использование гото: не использовать гото
225 Кирпич
 
23.11.24
12:12
goto всегда использовали, используют и будут использовать. Большинство языков имеют этот оператор, потому что он тупо нужен. А писать херню можно и любыми другими операторами.
226 Конструктор1С
 
23.11.24
14:10
(225) тупо нужен для чего?
227 Ненавижу 1С
 
гуру
23.11.24
15:43
(225) Обычно когда он нужен - достаточно выделить часть кода в отдельный метод
228 Кирпич
 
23.11.24
16:16
(226) Посмотри исходники любого серьёзного проекта (CPython например). Там этих goto навалом. Вот посмотри и догадайся зачем нужен goto.
229 Волшебник
 
23.11.24
16:19
(228) Я тоже удивляюсь, когда мне запрещают использовать конструкцию языка. Она ж в нём есть, значит использовать МОЖНО. Не надо доводить до абсурда: ноль GoTo или миллион GoTo. Ну пару раз можно-то?
230 Кирпич
 
23.11.24
16:23
(227) Ну так выделяй на здоровье. А если кому то нужна скорость, то такие выделения всё испортят.
И еще бывает, что программы пишут не программисты, а программы. И такие программы читать никому не надо. Например yacc и lex генерят код с кучей goto.
231 Кирпич
 
23.11.24
16:33
(229) Так никто и не запрещает. Просто переступаешь через психа и пишешь goto где надо.
232 Волшебник
 
23.11.24
16:35
(231) А потоптаться по психу можно?
233 Кирпич
 
23.11.24
16:47
(232) это надо у него спросить. может он ради этого топтания и докопался до goto.
234 AlexBor
 
naïve
23.11.24
19:07
))) Нас в универе перпод называл сбрищем гоо тушников )))) Давно это было )))
235 Конструктор1С
 
24.11.24
06:41
(228) в серьёзных проектах и говнокода хватает. Но это не значит, что "говнокод тупо нужен"
236 Конструктор1С
 
24.11.24
06:50
(229) когда-то на C++ писались бизнесовые приложения, со всеми этими ссылками, указателями, макросами и прочей плюсовой лабудой. Потом появились Java, C#, и оказалось что бизнесовые приложения прекрасно пишутся без плюсовой лабуды, и вовсе не обязательно простреливать себе коленки. GoTo из той же оперы, но потяжелее: средство отстрелить себе обе ноги, без которого прекрасно программируется. И я не понимаю, зачем вы так топите за GoTo. Хотите острых ощущений - кодьте на C++, на одних только указателях вдоволь намучаетесь
237 Волшебник
 
24.11.24
09:59
(236) Говнокод — это не конкретная инструкция, а состояние души. Можно и в СКД наговнокодить
Отбор или параметр по двум датам в СКД
238 Кирпич
 
24.11.24
10:37
(236) "И я не понимаю, зачем вы так топите за GoTo"
так никто не топит за goto. Есть люди, которые относятся к goto абсолютно ровно, а есть которые неистово топят против goto. goto всегда будет и не надо ссать против ветра. Маньяки какие то ей богу.
239 Кирпич
 
24.11.24
10:43
+(238) в C#, кстати, есть goto. Да и в Java есть какая то фича типа goto для перехода на метку.
240 Кирпич
 
24.11.24
10:45
golang вон, с утра придуманный, и тот с goto
241 Конструктор1С
 
24.11.24
11:24
(238) ссать против ветра - это использовать GoTo в коде. Все "доброкачественные" версии GoTo и так уже реализованы в каждом языке (возврат, продолжить, цикл и пр.). А если тебе понадобилось подпереть свой код настоящим GoTo, то это заведомо будет "злокачественная" версия GoTo, привносит она только проблемы и запутанность в код
242 Конструктор1С
 
24.11.24
11:26
(239) и что, что есть? За их использование получишь линейкой по рукам на первом же кодревью
243 Конструктор1С
 
24.11.24
11:27
(237) GoTo - средство элитных говнокодеровх
244 Кирпич
 
24.11.24
12:12
(242) "линейкой по рукам на первом же кодревью"
Если применение goto оправдано, то никто тебя линейкой бить не будет. Посмотри исходники CPython или SQLite. Там этих goto навалом.
А маньяки не делают кодревью. Они сидят на форумах и ноют про плохой goto, про Delphi умер и т.п.
245 Злопчинский
 
24.11.24
12:22
(227) угу, и передать туда с десяток параметров... такс, надо сделать рефакторинг... и понеслось...
246 Ненавижу 1С
 
гуру
24.11.24
12:26
(244) от контекста сильно зависит. В C оправдано может быть, в ассемблере без него сложно. В джава/шарпе - лучше без него
247 Ненавижу 1С
 
гуру
24.11.24
12:28
(245) если требуется десяток параметров, то что-то с архитектурой опять же
Понятно, что есть принцип работает - трожь, но потом мы же и говорим "ой это замшелый Легаси -лучше его не трогать"
248 Конструктор1С
 
24.11.24
13:02
(244) нет никаких оправданий GoTo
249 Конструктор1С
 
24.11.24
13:06
(245) а это уже верный признак того, что твой код делает всё и сразу
250 Aleksey
 
24.11.24
13:20
(248) почему? Предупреждение на сервере в модуле проведения это говнокод? Давайте всех кто использует предупреждение объявим еретиками и сожжем на костре!
251 Конструктор1С
 
24.11.24
13:35
(250) потому что GoTo запутывает код, делает его трудным для понимания и изменения. Мало?
252 Конструктор1С
 
24.11.24
13:41
+(251) спагетти-код, слышал о таком?
253 Dedal
 
24.11.24
14:44
(220) Вот после таких заявлений и требуется пинать франчайзи выпустившего конфигурацию, что благодаря его запросам через три точки отчет вообще не формируется. потому что пока там мало записей в таблице это все не влияет, а на боевой базе вдруг выясняется оно вообще не работает, записей слишком много добавьте скулю 100500 гб оперативы.
254 Ненавижу 1С
 
гуру
24.11.24
14:51
(250) предупреждение на сервере уже невозможно. Я же говорю - всякому инструменту свое применение
255 Aleksey
 
24.11.24
14:56
(251) Ну да 100500 вложенных процедур в типовой пипец как облегчает понимание. Это вам не GoTo
256 Aleksey
 
24.11.24
14:58
(254) так может и GoTо как инструмент обфускации кода тоже имеет право на жизнь?
257 Ненавижу 1С
 
гуру
24.11.24
16:51
(256) имеет
258 Ненавижу 1С
 
гуру
24.11.24
16:52
(255) архитектура платформы 1с мягко говоря уже не торт под поставленные задачи. Но мы держимся. Ведь держимся?
259 Конструктор1С
 
24.11.24
16:56
(255) то, что тебе приходится пробираться через 100500 процедур, так это последствия говнищенской декомпозиции и сильных зависимостей. C GoTo ситуация ухудшилась бы многократно
260 Волшебник
 
24.11.24
17:02
(256) как инструмент обфускации кода можно использовать любой говнокод. GoTo тут совершенно не при чём.
261 Волшебник
 
24.11.24
17:03
(258) Мы держимся, а вот Вас держим на учёте и под присмотром. Это ж надо на форуме 1С-ников придумать ник "Ненавижу 1С"!
262 Волшебник
 
24.11.24
17:19
(253) Вы просто не умеете их готовить.
263 Волшебник
 
24.11.24
17:31
(248) Нет никаких оправданий запрету любой конструкции или оператора, которая существует на базовом уровне, штатно.

Если у Вас проблемы с восприятием базового уровня языка/платформы, то Ваша токсичность наверняка полезет на следующий уровень и там Вас ждёт Ваш личный ад. Там Вы будете плеваться и блеваться, глядя на программный код любого, кроме себя. Это офигенный ад для программистов-перфекционистов.

Был бы я дьяволом, я бы именно такой придумал. 🔥
264 Волшебник
 
24.11.24
17:23
Кстати, в движке мисты GoTo используется... сейчас посчитаю... 0 раз.
Странно... Не пригодилось.
Но я себе не запрещаю.
265 Волшебник
 
24.11.24
17:26
(251) GoTo РАСПУТЫВАЕТ код и делает его ЛЕГЧЕ для понимания и изменения.
266 Конструктор1С
 
24.11.24
19:17
(265) бред!

Грёбаный стыд) Несколько лет назад запилил топик про TDD. 1Сники хором доказывали, что оно нафиг не нужно. Сейчас вот хором доказывают, что GOTO нужно. Верной дорогой идём, товарищи! А потом удивляемся, что 1сников за недопрограммистов считают
267 Волшебник
 
24.11.24
19:02
(266) Ты сам бред! Никаких конструкторов 1С не существует!
268 Конструктор1С
 
24.11.24
19:06
(263) ну уж так сильно-то передёргивать не надо. Если без GoTo, то сразу перфекционизм, ага. Я вообще-то про то, что в нашем грешном мире 1с и так говнокод как стандарт. Не хватало ещё за GoTo топить, ну, с его помощью говнокод выйдет на принципиально новый уровень!
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.