|
как 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
|
2005г. OFF: 1C и GoTo
... 2006г. OFF: goto - ваше отношение к этому оператору ... 2008г. Чем опасны (вредны) метки? ... 2009г. v8: как goto правильно пишется? ... |
|||
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
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |