Имя: Пароль:
1C
 
как goto правильно пишется?
, ,
0 quest
 
08.09.09
03:38
1С под рукой нет. Напишите плиз кусок кода с goto (определение метки и переход к ней)
1 ASV
 
08.09.09
03:44
2 8vC1
 
08.09.09
03:47
Не пользуйся метками, плохой стиль.
3 quest
 
08.09.09
03:51
(1) спасибо
(2) во первых - нужно сейчас для теста парсера. во вторых - goto это как пикантные духи для женщины - когда много - отвратительно, а вот когда в тему - просто супер
4 Дядя Васька
 
08.09.09
03:56
(3) Покажи хоть один пример где супер? Goto это не пикантные духи для женщины, и пикантная ложечка дерьмеца в бочке меда..
5 quest
 
08.09.09
03:59
сейчас сырцов на 1С нет. Гляну дома.
6 8vC1
 
08.09.09
03:59
(4) говорят ложка дегтя.
Если для тестов то ничего страшного, я не понимаю только, разве не проще закомментировать ненужные строки ?
7 quest
 
08.09.09
04:06
парсер должен все понимать. значит нужно и goto...
8 Rie
 
08.09.09
04:43
(4) Goto - средство для эмуляции отсутствующих структур управления. В 1С-ике отсутствует выход из вложенного цикла - для этой цели _придётся_ использовать goto (вариант с введением дополнительных переменных - ещё более дерьмопикантен).
9 Jolly Roger
 
08.09.09
05:29
(8) не _придётся_, если грамоте обучен...
10 SOAD
 
08.09.09
06:41
(0)  Сделай поиск по конфигурации по слову "Перейти"
11 SOAD
 
08.09.09
06:43
(8)  <<В 1С-ике отсутствует выход из вложенного цикла - для этой цели _придётся_ использовать goto

я вот тоже хотел, однако нельзя использовать метку в циклах )
12 SOAD
 
08.09.09
06:46
Перейти ~Метка!;  

~ Метка!: Сообщить("Осуществлен переход по метке.");
13 Ненавижу 1С
 
гуру
08.09.09
06:46
шо за парсер?
14 SOAD
 
08.09.09
06:47
Замечание! Метка в этом операторе не должна быть меткой перехода на оператор Процедура или Функция.

Замечание! Оператор безусловного перехода не может бьть использован для передачи управления на операторы, находящиеся внутри конструкций: Пока - КонецЦикла, Для КонецЦикла, Для каждого - КонецЦикла, Если КонецЕсли, Попытка - Исключение - КонецПопытки извне этих конструкций.
15 Коллайдер
 
08.09.09
06:49
(8)
"В 1С-ике отсутствует выход из вложенного цикла - для этой цели _придётся_ использовать goto"


Бред сивого мерина в ясную лунную ночь - Прервать на...




(12) неверно

~ Метка: Сообщить - без воскл знака...
16 Rie
 
08.09.09
07:27
(15) Из вложенного.

Пока ... Цикл
   Пока ... Цикл
       // здесь надо выйти из обоих циклов
   КонецЦикла;
КонецЦикла;

И как это сделать через Прервать (в общем случае)?
17 Irbis
 
08.09.09
07:31
(16)
Пока ... Цикл
   Флаг=Ложь;
   Пока ... Цикл
       // здесь надо выйти из обоих циклов
       Флаг=Истина;
       Прервать;
   КонецЦикла;
   Если Флаг=Истина Тогда
       Прервать;
   КонецЕсли;
КонецЦикла;

Как-то так...
18 ShoGUN
 
08.09.09
07:33
(17) Блин, лучше уж goto... А если у тебя три цикла? Сколько вложенностей - столько флагов? Жуть же...
19 Jolly Roger
 
08.09.09
07:33
епта, доступно и всерьез...
20 Rie
 
08.09.09
07:34
(17) Это понятно.
Но насколько лучше дополнительная переменная, чем goto?
О чём и речь - goto применяется тогда, когда прямых способов сделать что-то - нет.
21 Irbis
 
08.09.09
07:34
(18) Совсем не жуть, каждый цикл решает прерывать его самого или нет, и не думает за других. Просили без goto, получили.
22 Irbis
 
08.09.09
07:35
Но вообще тема из цикла: "Каждый дрочит как умеет".
23 Stepa86
 
08.09.09
08:04
Замечу, что операторы Прервать, Продолжить и Возврат в процедуре тоже являются аналогами GoTo, их тоже никто не использует из-за плохого стиля?
24 Rie
 
08.09.09
08:06
(23) В чём состоит "аналогия"?
25 Stepa86
 
08.09.09
08:12
(24) не огорчай меня =)

Все 4 оператора передают управление в другую часть программы, тока GoTo более универсален
26 Irbis
 
08.09.09
08:13
(24) Не обращай внимания, год выпуска в нем говорит.
27 Stepa86
 
08.09.09
08:14
(16) в общем случае сложные конструкции с большим вложением (больше 2х) нужно выносить в отдельные методы, иначе огребаем нехилый рост сложности кода и плохие способы решения...
28 Stepa86
 
08.09.09
08:17
(26) чем отличаются процедуры?

Процедура ДелаемЧтоТо()

Если Выходим() Тогда

Возврат;

КонецЕсли;

...

КонецПроцедуры

Если Выходим() Тогда

Перейти ~ВыходИзПроцедуры;

КонецЕсли;

...

~ ВыходИзПроцедуры:

КонецПроцедуры
29 Stepa86
 
08.09.09
08:17
(28) если не считать, что пропустил Процедура ДелаемЧтоТо() для второй процедуры
30 Irbis
 
08.09.09
08:22
(28) СП почитай. Перейти, продолжить - это часть конструкции цикла. А переход по метке - безусловная передача управления в произвольную точку программы.
31 Stepa86
 
08.09.09
08:24
(30) то есть продолжить не передает управление в конец цикла? а возврат не передает управление в конец процедуры, а прервать не передает управление на первый оператор сразу после цикла????
32 Irbis
 
08.09.09
08:28
Принципиальное отличие в слове "произвольную" точку программы, остальные конструкции передают управление во вполне определенную точку.
33 Stepa86
 
08.09.09
08:30
(32) это отличие, остальное совпадает... в GoTo критикуется сам факт передачи управления внутри метода, а не произвольная точка перехода
34 Stepa86
 
08.09.09
08:33
+(33) легко можно заменить все Возврат и Прервать в коде на Перейти (с Продолжить в 1С не уверен)- это разве не является определением аналога?
35 Irbis
 
08.09.09
08:36
(34) В этом все и дело, goto - безусловно в любую точку. конструкции цикла - в пределах цикла. Спор гроша выеденного не стоит.
36 Гефест
 
08.09.09
08:36
Интересно, почему одинэсники не перевели дословно и не сделали ИдиНа Метка?
37 Гефест
 
08.09.09
08:36
Ух как бы я тогда метки называл!
38 Irbis
 
08.09.09
08:37
(36) Тогда уж надо было бы ПНХ, и все метки с буквы "х"
39 Stepa86
 
08.09.09
08:38
(35) я говорю о том, что использование операторов Возврат, Продолжить, Прервать и Перейти по сути аналогичны и "чрезмерное его применение нарушает иерархическую структуру программы и приводит к созданию нечитаемого «спагетти-кода»"
40 Kaidend
 
08.09.09
08:44
Согласен со Stepa86. Разница только в том, что в случае Перейти точку перехода определяет программист, во всех остальных - интерпретатор по установленным правилам. По этой причине с помощью Перейти сделать код нечитабельные проще, чем с помощью других операторов, но, в общем, по своей сути они аналогичны.
41 Serg_1960
 
08.09.09
08:58
Ааа... Goto... два лагеря... война Алых и Белых Роз...
42 Stepa86
 
08.09.09
09:01
(41) дык война давным давно закончена, вот тока многие партизаны до сих пор не в курсе =)
43 Aleksey_3
 
08.09.09
09:02
Главным критерием применимости goto во всех случаях, включая указанные, является ненарушение используемой парадигмы программирования. В приведенных примерах это — структурное программирование, то есть должны сохраняться иерархическая организация программы и таковая же логика её работы. Нарушение принципа иерархии (например: переходы внутрь цикла; обход операций инициализации — как явных, так и неявных; выход из кода, следующего за fork(), в код, предшествующий ему) чревато всевозможными побочными эффектами, возникающими из деталей трансляции программы в машинный код, и, как следствие, странными, труднообнаружимыми ошибками.

(c) http://ru.wikipedia.org/wiki/GOTO
44 Aleksey_3
 
08.09.09
09:04
В частности

Оправданное применение

... применение GOTO в некоторых случаях можно считать допустимым. ... К таким случаям можно отнести: Выход из нескольких вложенных циклов сразу
45 Megas
 
08.09.09
09:09
(18) Гы .. А ты из цикла просто выйти хочеш или по условию ?
Прервать всяко лучше!
46 YauheniL
 
08.09.09
09:12
(8) На худой конец и исключение можно бросить в самом вложенном цикле, а на выхорде -- поймать.
47 Jolly Roger
 
08.09.09
09:13
тупые одинэсники не читали макконела и фаулера...
48 Stepa86
 
08.09.09
09:13
(47) я читал =)
49 Jolly Roger
 
08.09.09
09:14
... и продолжают долбить...
50 Irbis
 
08.09.09
09:15
Вот сколько програмлю, ну ни разу goto в 1С не пользовал. Только в школе на фортране и бейсике.
51 YauheniL
 
08.09.09
09:20
(50) +1
52 DUDE
 
08.09.09
09:25
(50) +2
53 Stepa86
 
08.09.09
09:28
(50) я не использовал, потому что научили, что это плохо... но (39)...
54 Serg_1960
 
08.09.09
09:32
(50)
"...Словарь Вильяма Шекспира, по подсчету исследователей, составляет 12000 слов. Словарь негра из людоедского племени «Мумбо-Юмбо» составляет 300 слов. Эллочка Щукина легко и свободно обходилась тридцатью..."(с)
55 5 Элемент
 
08.09.09
09:35
Из книги "Совершенный код".
Там же есть "Аргументы за goto"

Аргументы против goto
Основной аргумент против goto состоит в том, что код без goto — более качественный. Знаменитое письмо Дейкстры «Go To Statement Considered Harmful» («Обоснование пагубности оператора go to») в мартовском номере «Communications of the ACM» 1968 г. положило начало дискуссии. Дейкстра отметил, что качество кода обратно пропорционально количеству goto, использованных программистом.
В последующих работах Дейкстра утверждал, что корректность кода, не содержащего goto, доказать легче.
Код с операторами goto трудно форматировать. Для демонстрации логической структуры используются отступы, a goto влияет на логическую структуру. Однако использовать отступы, чтобы показать логику goto и места его перехода, сложно или даже невозможно.
Применение goto препятствует оптимизации, выполняемой компилятором. Некоторые виды оптимизации зависят от порядка выполнения нескольких выражений подряд. Безусловный переход goto усложняет анализ кода и уменьшает возможность оптимизации кода компилятором. Таким образом, даже если применение goto увеличивает эффективность на уровне исходного кода, суммарный эффект из-за невозможности оптимизации может уменьшиться.
Сторонники операторов goto иногда приводят довод, что они делают программу быстрее и проще. Но код, содержащий goto, обычно не самый быстрый и короткий из всех возможных. Изумительная классическая статья Дональда Кнута «Structured Programming with go to Statements» («Структурное программирование и операторы go to») содержит несколько примеров, в которых применение goto приводит к более медленному и объемному коду (Knuth, 1974).
На практике применение операторов goto приводит к нарушению принципа, что нормальный ход алгоритма должен быть строго сверху вниз. Даже если goto при аккуратном использовании не сбивают с толку, как только они появляются, они начинают распространяться по коду, как термиты по разрушающемуся дому. Если разрешен хотя бы один goto, вместе с пользой в код проникает и вред, так что лучше вообще запретить использование этого оператора.
В целом опыт двух десятилетий, прошедших с публикации письма Дейкстры показал всю недальновидность создания кода, перегруженного операторами goto.
В своем обзоре литературы Бен Шнейдерман (Ben Shneiderman) сделал вывод, что факты свидетельствуют в пользу Дейкстры и нам лучше обходиться без goto A980), а многие современные языки, включая Java, даже не содержат такой оператор.
56 MRAK
 
08.09.09
09:37
(2), (4) goto  в типовых используется. посмотрите в КД обработку по экспорту метаданных
57 IKSparrow
 
08.09.09
09:37
(2) (4) Меня всё время умиляли люди, которые говорили "не надо использовать такую конструкцию языка - это плохо!". Спрашивается, а на кой ляд тогда придумали сами авторы языка такую конструкцию и не слишком ли много на себя берут вот такие люди уча других программировать?
58 IKSparrow
 
08.09.09
09:38
+(57) Это не повод к драке, просто реально интересно стало. Уж извиняйте если кого обидел.
59 Andry888
 
08.09.09
09:38
(57) Почитай (55)...
60 MRAK
 
08.09.09
09:41
В принципе, если его (goto) раз в год использовать, а не как во встроенном бейсике УК-НЦ, то можно... хотя мне лично не нравится...
61 Ненавижу 1С
 
гуру
08.09.09
09:42
(57) кстати в java такое резервное слово есть, но не работает ))
62 ShoGUN
 
08.09.09
09:45
(57) Да можно использовать. Вопрос в том, что очень редко. Любой ценой переходов избегать тоже плохо, не надо до абсурда доводить. Но в принципе, 99,9% вещей выглядят красивей без goto.
63 5 Элемент
 
08.09.09
09:46
Из той же книги, аргуметт за

Хорошее программирование не означает исключение всех goto. Систематическая декомпозиция, усовершенствование и разумный выбор управляющих структур обычно автоматически приводит к программам, не содержащим goto. Стремление к коду без goto — это не цель, а результат, и бесполезно заострять внимание исключительно на устранении goto.
64 Stepa86
 
08.09.09
09:48
(63) у тебя в каком виде эта книга?
65 Serg_1960
 
08.09.09
09:49
66 ShoGUN
 
08.09.09
09:50
(63) +1 :)
(65) аааа) Помню же, что было уже...
67 Stepa86
 
08.09.09
09:51
(65) чо то 2007 год ущербный был...
68 5 Элемент
 
08.09.09
09:51
(64) djvu
69 Serg_1960
 
08.09.09
09:54
Использовать... не использовать... безполезняк... какие мелочи...

Вот вы такие здесь все умные - ответьте мне: этично или нет пользоваться топором, если я в курсе, что Раскольников им старушек убивал для мелочи?

(67) В 2007 тоже споры были - но не чета перечисленным :)
70 ShoGUN
 
08.09.09
09:57
(69) Не этично! Пользуйтесь пилой для убийства старушек!
71 Serg_1960
 
08.09.09
10:00
(70) Бензопилой предлагаете? Раз - была одна старушка. Два - стало две.
72 ShoGUN
 
08.09.09
10:04
(71) "Не скажите, гражданин судья! Пять старушек - уже рубль!"(с)
73 DUDE
 
08.09.09
10:04
(70) Динамитом их надо, динамитом! ;)
74 wt
 
08.09.09
10:19
Просто попробуйте отладить текст с goto и этими метками. И не просто текст, а приличный проект. Опплюетесь, да после этого единственным желанием станет переписать не фрагмент, а всю программу.
(50) +3
(39) не аналогичны. Они передают управление в конец/начало программного кода группы операторов/оператора, функции. В случае с goto передача идет без учета всяких прибамбасов с моментами инициализации переменных, массивов или подобных промежуточных вычислений. Как следствие, это может быть нерациональное использование памяти, снижение быстродействия. И наконец просто ошибки. Поиск которых сводится к затратам на перепись программной реализации. Это в 1с можно практически где угодно объявить переменную и она может быть доступна. В языках, где построже с инициализацией переменных, всё сразу становится на свои места.
В мою память, в вузах за это двойки ставили.
75 Stepa86
 
08.09.09
10:25
(74) на (28) ответь, если не аналогичны
76 Господин ПЖ
 
08.09.09
10:26
я раз пользовал "го то"

доктор, я буду жить?
77 Stepa86
 
08.09.09
10:27
(76) а смысл?
78 quest
 
08.09.09
10:32
(13) свой. Нужен оказался.
(65) Не прав. НЕ хотел этого холивара. Просто на машине где писал нет 1С. Соответственно СП.
Для всех - пофигу плохо это или хорошо. Будет нужно - буду использовать. Не будет нужно - не буду.
79 Rie
 
08.09.09
10:37
(57) GOTO придумали ещё в начале 1950-х годах. Когда языки программирования находились в зачаточном состоянии - и с точки зрения теории, и с точки зрения практики их использования.
По мере развития языков программирования GOTO заменялось более эффективными конструкциями. И сейчас сохраняется разве что "на всякий случай" - который, как правило, не наступает.
80 Rie
 
08.09.09
10:40
(75) Два отличия:
А) Вариант с Перейти - чуток тормознутее (практически незаметно - но всё же).
Б) Для умного компилятора (каковым компилятор 1С-ика не является) - значительно тормознутее (поскольку компилятор не вправе при наличии Перейти применять бОльшую часть оптимизирующих преобразований).
81 Irbis
 
08.09.09
10:41
(79) + Например в фортране и бейсике не было операторов цикла с постусловием и предусловием, и штатно такие конструкции реализовывались с помощью if&goto.
Но когда в школе переходили от этих языков к паскалю, препод прямо сказал - использование goto - неуд автоматически.
82 5 Элемент
 
08.09.09
10:45
(79) но он досих пор продолжает быть

Из тойже книги
И, наконец, операторы goto входят во множество современных языков, включая Visual Basic, C++ и Ada — наиболее тщательно продуманный язык программирования в истории. Ada создавался уже после того, как были приведены все аргументы с обеих сторон дискуссии по goto, и после всестороннего рассмотрения вопроса разработчики Ada решили включить в него goto.
83 Stepa86
 
08.09.09
10:45
(80) то есть разница только в скорости работы... когда есть 2 решения и одно из них универсально, то оно почти всегда дольше выполняется...
84 Rie
 
08.09.09
10:45
(81) В начале 1981-х Кушниренко, преподавая Фортран на ВМК МГУ, рассказывал о GOTO как о специальном синтаксисе для записи условных операторов и циклов в Фортране:

1 IF (.NOT.Условие) GOTO 2
......
2 GOTO 1

как принятую в Фортране запись для

WHILE Условие DO
...
END
85 Rie
 
08.09.09
10:47
(83) Не только в скорости (хотя она тоже важна).
86 Rie
 
08.09.09
10:49
(82) Продолжает использоваться "из соображений совместимости" и для эмуляции конструкций, которые разработчики языка посчитали редко используемыми и не включили в язык.
87 5 Элемент
 
08.09.09
10:53
(86) не думаю, что из соображений совместимости. Совместимость не сильный повод для языков, в отличие, например для железа.
88 Irbis
 
08.09.09
11:02
(84) C парадигмой не поспоришь. Однако даже на бейске за оформление подпрограммы с помощью goto двойка была обеспечена.
Я потому и сказал что спор по этому вопросу бессмысленный.
89 Rie
 
08.09.09
11:02
(87) Для C и C++, к примеру? :-)

Традиции достаточно сильны. Вирт как-то признался, что оставил begin ... end в Паскале (в составных операторах внутри if и циклов) именно для того, чтобы сторонники популярного тогда Алгола-60 чувствовали себя "как дома".
В последующих языках (Модула, Оберон и пр.) он ввёл явное завершение для условного оператора и цикла.
90 Живой Ископаемый
 
08.09.09
11:04
(2) Бу-га-га, кто бы сомневался, что в первых же постах вылезет 1Сник, чтобы блеснуть эрудицией...
91 Rie
 
08.09.09
11:04
(88) Насчёт бессмысленности сомнений нет.
Но - как показывает эта ветка, есть достаточно много народу, которые малость не в курсе, что, откуда и куда. :-)
92 5 Элемент
 
08.09.09
11:14
(89) Ты бы так поступил? Я нет. Надеюсь создатели этих языков сейчас не стали бы ради совместимости оставлять устаревшие конструкции.
93 Ненавижу 1С
 
гуру
08.09.09
11:17
(92) разработчики C# запретили "проваливание" в ветки ниже оператора case. И могли бы это сделать декларативно: не проваливается и все! Ан нет, заставили для совместимости писать разработчиков в каждой ветки break;
94 Rie
 
08.09.09
11:18
(92) В современные языки goto и не включают :-)
Языки "мейнстрима" - это разработки начала 1980-х годов.

Насчёт "так поступил": язык, которым никто не пользуется, - зачем создавать? Облегчить людям переход с привычных им языков - имеет смысл. Лишь бы это "облегчение" не мешало работать. goto в современных языках не мешает - поскольку им разумные люди стараются не пользоваться.
95 ДенисЧ
 
08.09.09
11:19
(94) до-диез - современный язык?
96 5 Элемент
 
08.09.09
11:25
(93)(94) наверное это из области психологии. Некоторым людям тежело отказаться от того чем редко пользуются (зачастую не пользуются) - выкинуть хлам из дома, выбросить ненужный подарок (это же подарок как я могу его выбросить!).
Какой ты в жизни такой и на работе :)

А может современные языки создают не современные люди?
97 Rie
 
08.09.09
11:25
(95) "С-подобный" :-)
Сохранение синтаксиса "для совместимости".
98 Rie
 
08.09.09
11:27
(96) Язык программирования должен быть _работающим_. Его разработка - весьма долгий процесс (я имею в виду и развитие "с учётом эксплуатации").
Ультрасовременность - это к любителям вешать на "Жигули" блямбу с "Мерседеса".
99 5 Элемент
 
08.09.09
11:35
(98) без goto он будет неработающим?

Согласен с тем, что "во-первых, необходимо потребовать от языка программирования соблюдения принципа полноты, т.е. оснастить его таким набором конструкций, который позволяет описать синтаксис (и семантику) всех допустимых конструкций языка без пропусков существенных аспектов." (c) intuit
100 Нуф-Нуф
 
08.09.09
11:35
100
101 Delorn
 
08.09.09
12:15
(90) +1 :) тоже зашел в ветку с мыслью что вот счас появится умный человек с заготовленной шаблонной фразой.
тоже считаю что в 1с единственным оправданием использование гоуто выход из вложенных циклов.
102 Rie
 
08.09.09
12:56
(99) Будет из без goto работающим.
Но нужно учесть затраты на перевод старых программ (есть, конечно, алгоритм, позволяющий любую программу с goto преобразовать в программу без goto; но читателям этой преобразованной программы не позавидуешь), на переучивание программистов. Пусть для одной программы и одного программиста затраты это невелики - но после умножения на число программ и число программистов цифра получается немаленькая. Вставить же в транслятор поддержку goto - копейки.
103 abjurer
 
08.09.09
12:58
А взять эти вложенные циклы и вынести в отдельную процедуру и выходить из N вложенных циклов единственным Возврат?
104 Живой Ископаемый
 
08.09.09
13:02
2(101,103) в принципе - можно сделать тоже самое и без гоуту.. переменная-индикатор и оператор Прервать...
ps/ Но у меня вообще нет предубеждений против каких-то слов - это с одной стороны, а с другой, иногда чужой код и без гоуту  может бесить так что готов исколоть портрет автора иголками...
105 Rie
 
08.09.09
13:09
(104) С тем, что отсутствие goto - не панацея против кривизны рук "программиста", - спору нет.
Но goto - это конструкция, которая создаёт проблемы и человеку, и транслятору, и даже процессору. В таком случае зачем её использовать?
106 v77
 
08.09.09
13:10
гоуту плохой :)))
можно подумать, что противники этого гоуту ужасно от него пострадали. ну вот ей богу, ну ведь нигде его почти не встречали и нигде он вам не мешал, а столько рёва, что аж страшно. можно подумать, что вы с утра до вечера сидите и переписываете программу на фортранев 100000 строк 1978 года написания и вся она истыкана этими гоуту.
чудики :))
107 Rie
 
08.09.09
13:10
(103) В 1С-ике?
А локальные переменные - в качестве параметров передавать? Новый кадр на стеке заводить?
Очень далеко не всегда это хорошее решение.
108 Rie
 
08.09.09
13:11
(106) Не поверишь - встречал. И переписывал с Фортрана программы, все истыканные этими goto. Правда, давно это было - ещё в начале 1980-х. Но - было.
109 v77
 
08.09.09
13:14
(108) Ну так забудь уже. Или к бабке сходи, пусть испуг снимет наконец. )
110 YauheniL
 
08.09.09
13:16
Оператор goto может породить массу проблем при использовании криворукими кодерами. Так как авторы книг ничего не знают про кривизну рук читателя, поэтому советуют не использовать.

Насчет 1С: там нельзя сделать переход в ЛЮБОЕ место кода. Есть ограничения, сходные с ограничениями в Java. Поэтому, вероятность возникновения ошибок ниже.

Зачем goto в С++ -- понятно (обратная совместимость с тем же С и тем, что, вероятно, было до него).

Зачем этот оператор в 1С -- загадка еще та
111 Живой Ископаемый
 
08.09.09
13:17
(109) гы, этапять! :)
112 abjurer
 
08.09.09
13:20
(107) В 1С-ке. И локальные переменные - да, передавать как параметры (не глобальными же их делать). Этот вариант тоже не беспроблемный, но, имхо, лучше, чем использование безусловного перехода.
113 trdm
 
08.09.09
13:35
блин, он же парсер пишет, т.е. работает уже с тем, что ЕСТЬ.
к чему базар "зло/не зло"?
114 Wehrmacht
 
08.09.09
13:59
(113) Как к чему?! Чтобы рабочее время оплачиваемое работодателем быстрее пролетало)))
115 Оболтус
 
08.09.09
14:01
А вот нам в универе неуд. не ставили за goto. Правда препод сразу сказала, что учитесь лучше без него писать программы. Но если используешь и сумеешь объяснить нафига надо - то не проблема.
116 Rie
 
08.09.09
14:11
(112) Куда хуже.
117 Оболтус
 
08.09.09
14:22
Кстати, в Комплексной, отчет "Регламентированные отчеты" с использованием меток написан...
118 quest
 
08.09.09
16:32
(105) >> Но goto - это конструкция, которая создаёт проблемы и человеку, и транслятору, и даже процессору. В таком случае зачем её использовать?
Жесть. особенно про процессор :) коли так - чем заменить jmp?
(113) дописал уже практически. Ща тестирую

Для всех - ветка подтолкнула на идею добавить трансформеру возможность раскрывать конструкции while/for/for-each в сравнения и переход к меткам. Так что если так извратиться, а потом еще пройтись обфусикатором - код станет 100% нечитаемый. И противники гото приобретут еще один большой плюс в свою поддержку :)
119 Ненавижу 1С
 
гуру
08.09.09
16:34
yield return на вас нет!
120 quest
 
08.09.09
16:38
(119) я бы сказал лиспа и схемы на всех нет:) А также пролога. (кстати, в прологе по моему нет goto) Может всем перейти на него?
121 Кириллка
 
08.09.09
16:42
(116)чем?
122 Дядя Васька
 
08.09.09
16:56
Вообще-то выход из вложенных циклов вещь сама по себе сомнительная... Примерчик можно, где оно обосновано?
123 Дядя Васька
 
08.09.09
16:58
+(122) Суть в том что каждый из вложенных циклов в некотором смысле структура самодостаточная, и ему самому положено решать когда надо прерваться...
124 Дядя Васька
 
08.09.09
17:00
Иначе получается что-то вроде из функции 1 вызвали функцю 2, из функции 2 функцию 3, и хотим из функции 3 вернуться в функцию 1 не ставя об этом в известность функцию 2. Очевидно что структурно и ошибки вылезут почти наверняка, причем такие, которые сложно будет выловить.
125 Дядя Васька
 
08.09.09
17:01
Очевидно что структурно = Очевидно что структурно неверно
126 v77
 
08.09.09
17:17
(124) Не вгоняй народ в заблуждение. Циклы не функции и ничего страшного не случиться.
127 Дядя Васька
 
08.09.09
17:26
(126) Согласен что не одно и то же, но смысл именно такой. Если для примера брать двухмерный массив в котором надо найти определенное число, то конечно ничего не случится, но в реальной проге после вложенного цикла могут быть и еще какие-то операторы, возможно даже с тем вложенным и не связанные. Например перебираем элементы справочника, во вложенном перебираем подчиненные и что-то там с ними делаем, после вложенного делаем с элементом основного справочника что-то еще. Изначально написали без прерываний, потом какой-то тру одинэсник увидел что после какого-то элемента подчиненного дальнейший перебор не имеет смысла и оптимизировал код выкинув по "возврат" из процедуры, в итоге код по элементу основного работать перестал. Ошибка весьма неочевидная, искать ее тяжко потом. Потому и говорю что лучше если каждая структура будет только за себя решать когда прерваться, но никак не за вышестоящие. Фик с ним что лишняя проверка во внешнем цикле будет, зато не накосячишь.
128 Rie
 
08.09.09
17:35
(121) Либо эти вложенные циклы изначально были достаточно самостоятельным куском кода - и тогда почему их сразу не выделили в отдельную процедуру/функцию?
Либо (раз не выделили) - эти циклы плотно завязаны на окружающие операторы или локальные переменные процедуры. И тогда выносить в их в отдельную подпрограмму, теряя (пусть и немного) в скорости/памяти и делая трудночитаемым кусок кода - и всё это ради избавления от единственного перехода - маразм полнейший.

goto ведь плохо не само по себе, а из-за кривого использования (при том, что "прямое" использование его - редчайший случай). И избавление от него - отнюдь не самоцель.
129 Rie
 
08.09.09
17:35
(118) Помедитируй на тему "конвейер команд".
130 YauheniL
 
08.09.09
17:42
(129) Конвейер и обычный оператор ветвления сбрасывает ))
131 Delorn
 
08.09.09
17:47
(127) потом какой то сферический 1сник... Поставил доп проверку только в одном из внешних циклов а в одном пропустил... Фиг с ним с этим. я вот чего не понимаю. Условие, цикл, прервать,возврат,.. все это условные переходы как их не называй. Есть конечно какой то загадочный предсказатель переходов. :) Но вот вопрос как там с ним и 1с...
132 Rie
 
08.09.09
17:48
(130) Конечно. Но для регулярных управляющих структур компилятор (достаточно умный, естественно) сгенерирует код, который поменьше сбрасывает конвейер. А в случае с goto - тут в 99% случаев будут проблемы.

(Я выше по ветке оговаривал, что транслятор 1С-ика назвать оптимизирующим компилятором сложно, но ведь на 1С свет клином не сошёлся).
133 Delorn
 
08.09.09
17:53
(132) я думал мы про 1с...

ВремяДоСтарта=ТекущаяДата();
ВремяТекущее=ВремяДоСтарта;
Пока ВремяДоСтарта=ВремяТекущее Цикл;
 ВремяТекущее=ТекущаяДата();
КонецЦикла;
Пока а<>1000000 Цикл
а=а+1;
КонецЦикла;
ВремяФиниш=ТекущаяДата();
Сообщить(ВремяФиниш-ВремяТекущее);
7мь секунд

ВремяДоСтарта=ТекущаяДата();
ВремяТекущее=ВремяДоСтарта;
Пока ВремяДоСтарта=ВремяТекущее Цикл;
 ВремяТекущее=ТекущаяДата();
КонецЦикла;
~Метка: а=а+1;
Если а<>1000000 Тогда
Перейти ~Метка;
КонецЕсли;
ВремяФиниш=ТекущаяДата();
Сообщить(ВремяФиниш-ВремяТекущее);
7мь секунд
134 YauheniL
 
08.09.09
17:55
(131) Если этот же сферический 1сник в вакууме натыкает goto, конфа лучше работать не станет ))
(132) Там все равно система предсказания переходов (как-то так она называется) используется. Но разве система, основанная на вероятностях может гарантировать стабильную работу (в смысле, постоянный успех)? И по-моему, это фича процессора

Просто goto в руках бухгалтера, который думает, что программировать на 1с ему дано от Бога, творит тру чудеса ))

Свое личное отношение я уже высказывал...

А вот зачем этот оператор в 1с?
135 Дядя Васька
 
08.09.09
17:57
(128) На самом деле это очень частая ситуация когда прогу дописывают в течение долгого времени. Сначала целью вложенных циклов была работа с подчиненными элементами, потом дописали что-то по основному туда же, чтобы два раза не перебирать, потом полезли опять с подчиненными что-то делать, а про основные забыли. Весь модуль разбирать не станешь, написанный черти когда пусть и тобой же, но уже фик вспомнишь что он вообще делает, не говоря уж о том как. Работать будешь определенный кусок кода, а ошибка вылезет 1000 строк спустя, как-то так...
(131) Разница в том что эти переходы ведут в конец структуры, если видишь Прервать, ты знаешь куда кривая выведет, а с гоуту это совсем не очевидно, особенно с  учетом того что если кто-то начал их лепить, и одним выкинул за циклы, будь уверен что через пару строк найдешь еще один, который тебя швырнет куда-то вверх. Уж это к бабке не ходи...
136 Rie
 
08.09.09
17:58
(128) Частая ситуация. Но если начинаешь менять структуру программы - то ведь не ради единственного goto.
137 Дядя Васька
 
08.09.09
18:01
(136) Тут речь не по гоуту, а про выход из структуры "через голову" вышестоящей. Не надо перепрыгивать вышестоящий цикл, код со временем разрастется и концов  не найдешь. Лучше поставь два раза одно и то же условие и прервать во внутреннем и внешнем, сколько потом кода не пиши, работать будут как и с самого начала.
138 NikVars
 
08.09.09
18:01
ОПА!
Гоуту!!!
А можна испльзовать комментарии внутри циклов?!
Они же игнорируются!!!
А так как мы имеем интэрпэтатор, то на это игнорирование тратим время.
Вот какая мысля на тему гоуту!
139 Дядя Васька
 
08.09.09
18:03
(138) У тебя довольно слабые представления о работе этого интерпретатора :) Сначала все же компилятор работает, который переводит твою писанину в промежуточный код, там нет комментариев, и много чего еще нет и что возможно оптимизировано :)
140 Delorn
 
08.09.09
18:05
(135) здравствуйте... Думаю вы заработались. Я говорил о том что иногда нужно выйти из вложенных циклов. За всю жизнь пару раз надо было. Я не говорил про переход наверх. Не надо придумывать :)  Чем больше кода тем неудобней читать...

//Выйдем из всех циклов
Перейти ВыходИзЦиклов:

Красивей чем 5 раз
Если флВыйтиИзЦиклов Тогда
Прервать;
КонецЕсли;
Чем больше кода тем больше ошибок...  
(139)+1 20 строчек комментариев внутри цикла все те же 7мь секунд выполнения (133)
141 Дядя Васька
 
08.09.09
18:10
(140) Сколько раз встречал гоуту, ни разу не видел чтобы этим ограничились. :) В любом случае если и делать выход из всех сразу, то понятнее будет, если засунуть их в отдельную функцию. А лучше вообще этого не делать, так как все вложенные делают "общее дело" только когда изначально это пишешь, а когда потом туда еще какого функционала навтыкаешь может и боком выйти такой выход...
142 YauheniL
 
08.09.09
18:18
(141) Так это же как наркотик: "Ага, использовали гоуту для выхода из цикла 5-го уровня вложенности... блин, тут бы еще... так ведь уже есть один гоуту, была-не-была, на те второй".
143 quest
 
08.09.09
18:18
о блин. холивар то запустил...
144 quest
 
08.09.09
18:19
Порадуйтесь за меня - работает все. Осталось облагородить и можно дальше идти
145 Дядя Васька
 
08.09.09
18:23
(144) Осталось выкинуть вариант с переходами и написать по-нормальному :)
146 quest
 
08.09.09
18:24
(145) ??? как их выкинуть если они часть тестов? Ведь какой же это будет анализатор кода если он не будет анализировать и гото?
147 Дядя Васька
 
08.09.09
18:26
(146) Ну я просто не очень в курсе что ты там ваял, думал выгрузка какая-то, и надо просто присланное файло разобрать...
148 Delorn
 
08.09.09
18:28
(142) зачем?
(145) зачем? :) всегда можно прийти взяться за голову и сказать у вас все написано не правильно.... И срубить еще бабла.
Клиника она не лечится... У меня вот живой пример... Завод проплатил пару лямов за мега систему на СКЮЛЬ+клиенты на VB... в месяц 60 штук за доработки... уже второй год платят. Итого нет ни каких гоуто... За то список заявок(журнал документов по 1сному) для каждого клиента формируется в отдельную временную таблицу... Страшно представить как идет обновление временных таблиц при добавлении заявки в центре... И подобных ляпов не мерянно.
149 smaharbA
 
08.09.09
18:31
опять за рыбу деньги
гоуту - нормальная и нужная инструкция
все рассуждения о плохости и лохости - тупость.
150 quest
 
08.09.09
18:34
(148) насчет клиники - это абстрактно? или в продолжение предложения переписать и выкинуть?
151 Дядя Васька
 
08.09.09
18:40
(149) Пример нужности в студию
152 v77
 
08.09.09
20:25
(151) В любой книжке, по любому языку программирования, где есть goto, есть пример нужности. Самый распространенный - выход из вложенных циклов.
153 Serg_1960
 
08.09.09
22:02
(151) Проспал весь холивар :) "Поехали"(с)

Пока ... Цикл
  Пока ... Цикл
     Перейти ~Выход;
  КонецЦикла;
КонецЦикла;
~Выход:
154 quest
 
08.09.09
22:12
было. не интересно. придумал лучше.
метки = новый соответствие;
метки[1] = "x1";
метки[3] = "x2";
метки[4] = "x3";
метки[5] = "x4";
155 quest
 
08.09.09
22:15
блин...

метки = новый соответствие;
метки[1] = "x1";
метки[3] = "x2";
метки[4] = "x3";
метки[5] = "x4";

х = ВвестиЧисло();
выполнить( " перейти "+метки[x]);

~x1:
 ....
 goto end;
~x2:
 ....
 goto end;
~x3:
 ....
 goto end;
~x4:
 ....
 goto end;
~end:


как в басике "on x goto x1,x2,x3,x4" - в каком-то из дилектов было такое
156 Andry888
 
08.09.09
22:31
(155) а под "goto end" ты предпологаешь еще один goto? ... я б просто ифомом сделал...
157 Serg_1960
 
08.09.09
22:41
(155) Абалдеть. Ценители чистоты кода охренеют :)
158 YauheniL
 
08.09.09
22:58
(155) o_O
159 Дядя Васька
 
08.09.09
23:31
(153) Смотри выше, делается через процедуру с возвратом, а по мне так лучше вообще так не делать.
(155) Да, case'а в 1С нет, но это не повод для goto, набор из ИначеЕсли будет смотреться не хуже чем это, и по скорости не думаю что будет ощутимая разница. Что несколько проверок, что работа со строкой в  " перейти "+метки[x], думаю то на то и выйдет...
160 quest
 
09.09.09
00:06
в (155) ляпнул не подумавши, но вот сейчас после достаточно бурной дискуссии с другом пришел к выводу что в принципе после анализа AST можно развести процедуры/функции примерно к такому ядру

массивПереходов = новый соответствие;
массивПереходов[1] = "х1";
массивПереходов[2] = "х2";
массивПереходов[3] = "х3";
.....
массивПереходов[1000] = "х1000";

текСостояние = Неопределено;

~Старт:
 выполнить("перейти "+массивпереходов[текСосотяние]);

~x1:
 тут какието действия
 текСостояние = 2;//переход в новое состояние
 перейти Старт;
....
~x1000:
 тут какието действия
 текСостояние = 912;//переход в новое состояние
 перейти Старт;

Код становиться абсолютно нечитаемым, неотлаживаемым.
161 Serg_1960
 
09.09.09
00:30
Переход = "КодСтановиться";
~Старт:
  Выполнить("Перейти ~" + Переход);
~Абсолютно:
  Переход = "Нечитаемым";
  Перейти ~Старт;
~Неотлаживаемым:
  Переход = "Финиш";
  Перейти ~Старт;
~Нечитаемым:
  Переход = "Неотлаживаемым";
  Перейти ~Старт;
~КодСтановиться:
  Переход = "Абсолютно";
  Перейти ~Старт;
~Финиш:
162 quest
 
09.09.09
00:40
уловил... но лучше индексный доступ Ведь можно организовать индкексацию так Инд1[Инд2[Инд3[Инд4[Инд5[]]]]] - причем определения Инд2...ИндN погут формироваться и переписываться между переходами. Практически самомодифицирующийся код...
163 AntonioS
 
09.09.09
01:28
Любой язык программирования - инструмент для моделирования жизни.
так вот, за ГоТо не стоит реальность.

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

Так вот если заниматься не "написанием" программы, а "описанием" реальности,
то просто по природе не возникнет потребность в ГоТо.

Так что ГоТо в помойку, учимся грамотно моделировать.
Захотел использовать ГоТо - ляг, поспи, а проснувшись, используй рекурсию.
164 quest
 
09.09.09
01:34
не прав. За любой пулей - гото в никуда.
а моделирование - либо четко математически - у тут без гото никуда :) (автоматы, цепи Маркова), либо набор операций куда включать или не включать гото - дело вкуса. Да и рекрсия невсегда рулит
165 Дядя Васька
 
09.09.09
02:21
(163) Отсыпь мне тоже немного этой чудо-травы :)
166 TeddySlaf
 
09.09.09
02:30
(163) За жисть...
А кирпич упадет на голову — вот и переход... :)
А мешок с лимонами найти — вот и нах работа...
:)
167 Rie
 
09.09.09
04:58
(164) Четко математически (автоматы, цепи Маркова) - тут как раз goto бесполезен: количество меток определено заранее, множество же состояний автомата - определяется в ходе выполнения программы.

Рекурсия - универсальный механизм. "Рулит всегда". Но не всегда эффективно реализуется (к примеру, многие трансляторы с императивных языков программирования не утруждают себя оптимизацией "хвостовой" рекурсии). Поэтому при наличии эффективных специализированных механизмов лучше использовать эти механизмы, а не пытаться впихнуть рекурсию ради рекурсии.

Удивительно, что 30-летней давности споры, давно уже решённые, всплывают вновь и вновь.
168 kosts
 
09.09.09
08:48
Чисто практически. Переписать это без goto. (8.0)
Но что бы не выглядело монстрообразным :-)

// Сравнение таблиц, добавление отсутствующих в третью
Для каждого тзсс Из ТЗ Цикл
   Для каждого сс Из Основная Цикл
       Если сс.Сотрудник = тзсс.Сотрудник и сс.Должность = тзсс.Должность Тогда
           Перейти ~Метка;
       КонецЕсли;
   КонецЦикла;
   нс = ТЗДобавляемых.Добавить();
   нс.Сотрудник = тзсс.Сотрудник;
   нс.Должность = тзсс.Должность;
   ~Метка:;
КонецЦикла;
169 Ненавижу 1С
 
гуру
09.09.09
08:54
Для каждого тзсс Из ТЗ Цикл
  ШоЗаНах = ложь;
  Для каждого сс Из Основная Цикл
       Если сс.Сотрудник = тзсс.Сотрудник и сс.Должность = тзсс.Должность Тогда
           ШоЗаНах = истина;
           Прервать;  
       КонецЕсли;
   КонецЦикла;
   Если ШоЗаНах Тогда
     Продолжить;
   КонецЕсли;
   нс = ТЗДобавляемых.Добавить();
   нс.Сотрудник = тзсс.Сотрудник;
   нс.Должность = тзсс.Должность;
КонецЦикла;
170 Stepa86
 
09.09.09
09:00
Для каждого тзсс Из ТЗ Цикл

НайденныеСтроки = Основная.НайтиСтроки( Новый Структура( "Сотрудник,Должность" , тзсс.Сотрудник , тзсс.Должность ) );

Если НайденныеСтроки.Количество() = 0 Тогда
   нс = ТЗДобавляемых.Добавить();
   нс.Сотрудник = тзсс.Сотрудник;
   нс.Должность = тзсс.Должность;
КонецЕсли;

КонецЦикла;
171 kosts
 
09.09.09
09:03
(170) Вот это дело
172 Stepa86
 
09.09.09
09:08
+(170) даже лучше так:

Для каждого цСтрока Из ТЗ Цикл

НайденныеСтроки = Основная.НайтиСтроки( Новый Структура( "Сотрудник,Должность" , цСтрока.Сотрудник , цСтрока.Должность ) );

Если НайденныеСтроки.Количество() = 0 Тогда

   ЗаполнитьЗначенияСвойств( ТЗДобавляемых.Добавить() , цСтрока );

КонецЕсли;

КонецЦикла;
173 kosts
 
09.09.09
09:12
(172) Блин - не подозревал про такую функцию
174 5 Элемент
 
09.09.09
09:19
Воображаемая дискуссия по поводу goto
Отличительная особенность большинства обсуждений goto — поверхностность.
Спорщик, утверждающий, что «goto — это зло», приводит тривиальный фрагмент кода, содержащий операторы goto, а затем показывает, как легко его можно переписать без goto. Это доказывает главным образом то, что тривиальный код можно легко написать и без goto.
Спорщик, утверждающий: «Я не могу жить без goto», — обычно приводит случай, в котором исключение goto выливается в дополнительное сравнение или дублирование кода. Это доказывает в основном то, что есть случаи, в которых goto позволяет выполнить на одно сравнение меньше — незначительная выгода для современных компьютеров.
175 UserAVS
 
09.09.09
09:29
Симпозиум программистов 1С на тему "Роль goto в народном хозяйстве"
176 Ненавижу 1С
 
гуру
09.09.09
09:40
надо доказать теорему: "Любой алгоритм на 1С можно привести к алгоритму на 1С без goto"
177 v77
 
09.09.09
09:40
(174) спорщиков "Я не могу жить без goto" обычно не бывает, бывают "Мне пофиг goto не goto лишь бы работало и меньше писанины"
178 Serg_1960
 
09.09.09
10:56
Стоит только заикнуться насчет GOTO - как тут-же, словно тараканы из всех углов, выползают на свет его противники. И спорят с пеной у рта с теми, кто равнодушно дышит по поводу его существования.
"Чем уже кругозор - тем шире категоричность суждений"(я)
179 Fynjy
 
09.09.09
11:05
Есть правило про переход:
Допустимо использовать Goto, если конструкция помещается на экране ... Т. е. код читается ...
ЗЫ: я редко но использую.
180 Rie
 
09.09.09
11:44
(176) Уже доказана. Лет 30 назад. Теорема Бома-Якопини. Применима не только к 1С.
181 v77
 
09.09.09
11:55
(180) Во дают. Теоремы даже есть на эту тему, а goto всё живет. И тебя переживет. Потому что нужно!
182 Rie
 
09.09.09
12:06
(181) Кому? :-)
Пишут люди программы безо всяких goto. Давно уже. И успешно.
Что тебе всё неймётся-то?
183 lift
 
09.09.09
12:21
(0) да уж действительно плохой стиль!!! никогда (в любом языке программирования) этого не делал!
184 v77
 
09.09.09
13:20
(182) Мне неймётся? :)))
185 Fragster
 
гуру
09.09.09
13:26
(182) пока в 1с не появится «continue n» и «break n» с n больше 1 - оно облегчает... как появится - отпадет необходимость... хотя с такими вещами - в фунцкции циклы заворачиваю, и ничего...
186 Torquader
 
09.09.09
13:49
Ещё goto нужно для написания кода клеточного автомата (алгоритм, который переходит из одного состояния в другое).
Проще каждое состояние обозначить меткой, а переходы делать через goto, так как все остальные методы не добавляют прозрачности описанию алгоритма.
P.S. на 1С клеточный автомат написать практически невозможно, так как нет возможности создавать дополнительные потоки, а вечноисполняющийся код просто блокирует работу.
187 DrZombi
 
гуру
09.09.09
13:55
Сколько слов, но почему никто так и не обращает внимание на приписку - "что это не рекомендуется использовать, в циклах и т.д.", если подумать хорошо, то не с пустого мест - типо это плохой тон.
188 Mort
 
09.09.09
14:00
Просто человек использующий goto рассматривает свой код как набор строчек-команд (7-ки часто страдают таким, особенность языка), тогда как врубной кодер рассматривает прогу как набор операций над объектами и тут goto никак не вяжется.
189 v77
 
09.09.09
14:01
(188) "что это не рекомендуется использовать, в циклах и т.д."
Это где ты такое вычитал?
190 v77
 
09.09.09
14:02
пардон
(187)
191 DrZombi
 
гуру
09.09.09
14:03
(190)(189)В жЁлтой книге :)
192 DrZombi
 
гуру
09.09.09
14:05
(190)"в циклах" - при выходе из циклов :)
193 v77
 
09.09.09
14:05
(191) Там такого быть не может. Это глупость. Какая страница?
194 v77
 
09.09.09
14:06
метки нельзя ставить в теле цикла. а goto в циклах ставь, хоть заставься
195 DrZombi
 
гуру
09.09.09
14:11
(194) С чего ты взял что нельзя метку в теле, но можно метку из тела, при это пофигу как себя поведет компилятор при использовании ГО_ТО для выхода из цикла.
В примере "выше" приведен эфект твоей логики, ведь проблема не в том что ГО_то нельзя, а проблема в том какой эфект будет ;)

Ведь язык 1С не ты писал и как показывает практика, команда Го_ТО не доработана ;)
196 DrZombi
 
гуру
09.09.09
14:12
(194)Для тебя пример, v8: Выделение строки в дереве
197 v77
 
09.09.09
14:13
(195) Я имею ввиду что нельзя делать переход на метку, которая расположена в другом цикле, не в том, где goto
198 DrZombi
 
гуру
09.09.09
14:15
(197)А в примере в (2) или в (196) показано, что при выходе из цикла по коменде ДО_ГО :)
Теряется логика ;)
Вернее прога делает немого не так
199 v77
 
09.09.09
14:15
(196) Ну там всё правильно. Классический выход вложенного из цикла.
200 v77
 
09.09.09
14:16
из вложенного цикла
201 Torquader
 
09.09.09
18:58
Иногда и переход внутрь цикла нужен - если мы что-то делали со вложенными циклами, то возникает необходимость отдать управление системе (запомнив место, где мы это сделали), а после получения управления войти в циклы в то место, где вышли.
Но "умные" создатели языка 1С это делать запретили - поэтому приходится "чесать репу" как это сделать.

Кроме того, вариант с goto смотрится лучше, чем вариант с "кривым" циклом:
// ЦИКЛ do-loop
~Label:
// тело цикла
RunBodyAlgo();
// условие выхода
if Condition()=1 then
 goto ~Label;
endif;
или вариант без goto:
while(1=1)do
// тело цикла
RunBodyAlgo();
// условие выхода
if Condition()<>1 then
  break;
endif;
enddo;

Вот и получается, что без goto как-то тоскливо.
202 YauheniL
 
09.09.09
19:01
(195) На нее просто наложены строгие ограничения для уменьшегия потенциальных ошибок применения. Как в Java