Имя: Пароль:
1C
 
"~Начало:" - что значит эта строка в коде
0 Aleksey1989
 
10.04.15
08:46
Добрый день. Недавно в коде увидел такую строку:
~Начало:
Никогда раньше не встречал подобного. Это что-то вроде комментария или у этой строки другое предназначение?
1 Fish
 
10.04.15
08:46
Другое.
2 vis_tmp
 
10.04.15
08:47
СП уже не продают?
3 Fish
 
10.04.15
08:47
Перейти (Goto)
Синтаксис:
    Перейти ~<Метка>;

Англоязычный синтаксис:
    Goto ~<Метка>;

Описание:
Безусловная передача управления на другой оператор программы. Передает управление от одного оператора к другому. Область действия оператора ограничивается программным модулем, процедурой или функцией; он не может передать управление за пределы программного модуля, процедуры или функции.

Метка – это идентификатор, "помечающий" определенный оператор, на который надо передать управление в ходе выполнения программы. Метка отделяется от этого оператора двоеточием и предваряется символом "~".

Пример:

Пока Истина Цикл
Для Каждого Элемент Из МассивЭлементов Цикл
  Если ВыполнениеУсловия(Элемент) Тогда
   Перейти ~ВыходИзДвойногоЦикла;
  КонецЕсли;
  ...
КонецЦикла;
КонецЦикла;
~ВыходИзДвойногоЦикла:
// продолжение вычислений
4 Wobland
 
10.04.15
08:47
это высший пилотаж программирования, это для goto
5 Aleksey1989
 
10.04.15
08:50
(2) У меня он не работает :((( Политики безопасности не позволяют его запустить.
6 SeraFim
 
10.04.15
08:50
Go to = послать на
7 vis_tmp
 
10.04.15
08:51
(5)Как это...?
8 aka AMIGO
 
10.04.15
08:51
"Использовать метки в кде 1С - признак дурного тона программирования" © Миста :)

Я только однажды применил метку, вынужденно, но меня заклевалииии... :)

ЗЫ. не помню, в Бейсике есть метки, или нет.. но вроде как первый язык, в котором рекомендовано применять только циклы и процедуры с функциями.. бэз меток :)
9 aka AMIGO
 
10.04.15
08:52
* кде = коде
10 Fish
 
10.04.15
08:53
(8) В бейсике обязательно есть.
11 ДенисЧ
 
10.04.15
08:54
(8) Называть работающий код дурным тоном - очень дурной тон (с) Я
12 aka AMIGO
 
10.04.15
08:54
(10) ммм.. много воды утекло, как я на нем писал.. :)
13 фобка
 
10.04.15
08:56
Прост нет ситуаций в программировании в которых можно обойтись без гоуту
14 1976vas
 
10.04.15
08:56
(12) Как раз в Бейсике и было сплошь и рядом метки )
15 фобка
 
10.04.15
08:56
*Можно = нельзя
16 Славен
 
10.04.15
08:56
(11) СП доучивай )))
17 фобка
 
10.04.15
08:57
(14) да, нас еще в школе начале 90х  учили с метками работать на бейсике
18 Defender aka LINN
 
10.04.15
08:58
(0) Это кодовое послание. Оно гласит "беги отсюда, глупец!"
19 Defender aka LINN
 
10.04.15
08:59
(8) Вынужденно - это как? Ствол к бейцам приставили? :)
20 Fish
 
10.04.15
08:59
Вот и выросло поколение "программистов", не знающих, что такое Goto.
21 Провинциальный 1сник
 
10.04.15
09:00
(14) В бейсике изначально ничего и не было, кроме меток.. они тогда назывались номерами строк)
22 Defender aka LINN
 
10.04.15
09:00
(20) Это не страшно. Страшно, когда они всего остального не знают.
23 Лефмихалыч
 
10.04.15
09:01
(0) это Капитан Очевидность лепёшку уронил
24 aka AMIGO
 
10.04.15
09:01
(13) (17) А мне уж ооочень хотелось метку применить :)
И применил! :)
И, что удивительно, код работал! Маршрутную карту производства на-раз рассчитывал :)

ЗЫ. а может, это был не Бейсик?.. я как-то посчитал, на скольки языках пришлось писать за мою жисть-жестянку.. на 15-ти сбился со счета.. :)
25 фобка
 
10.04.15
09:02
(24) ты в своём праве. Ты же программист
26 Herby
 
10.04.15
09:02
Кто нибудь может дать логичное объяснение почему использовать метки - дурной тон?

если их использовать сплошь и рядом, может и соглашусь,

но так больше похоже на "одна баба сказала" - и все за ней повторять начали..
27 aka AMIGO
 
10.04.15
09:04
(26) я-ж написал в (8), что копирайт высказывания у мисты!! :)
28 Адский плющ
 
10.04.15
09:04
(26) Прикладной программист оперирует объектами, а тот, у кого гогно в голове - строками кода.
29 ДенисЧ
 
10.04.15
09:05
30 Лефмихалыч
 
10.04.15
09:05
(26) Дэйкстра дал - они контекст не сохраняют.
Работать будет, что с метками, что без них, но для того, чтобы написать код, понятный компьютеру, программист по большому счету не нужен - кто угодно в принципе может это сделать. Программист нужен, чтобы написать код, понятный человеку
31 Провинциальный 1сник
 
10.04.15
09:05
(26) Так завещали Дейкстра, Кнут и Вирт
32 Defender aka LINN
 
10.04.15
09:05
(26) Потому что "Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте" © М. Голдинг
33 фобка
 
10.04.15
09:06
(26) нарушается последовательное чтение кода? Сверху вниз)
Ну и если начал юзать метки - в итоге однажды начнешь стряпать кашу - прыгни сюда, прыгни туда. Падает читабельность. Лучше не начинать, мысли последовательно
34 Лефмихалыч
 
10.04.15
09:06
35 vde69
 
10.04.15
09:08
в функциональных языках меток нет совсем....

только в процедурных они есть....

все кто говорит, что метки зло - марш в функциональные языки :)))

правда я сам за последние 10 лет ни одного гоуто не юзал
36 quest
 
10.04.15
09:10
функйиональщина не всегда хорошо. есть класс задач где проще и быстрее наговонокодить в императивном стиле, чем разрабатывать математическую модель.
37 bodri
 
10.04.15
09:12
Последний раз Goto использовал в клюшках лет 8 назад, а за всё время раза 3. И это было очень необходимо. В снеговиках еще ни разу не приходилось)
38 Fish
 
10.04.15
09:14
(34) Концовка зачётная:
"Упражнения по более или менее механическому переводу произвольной схемы алгоритма в схему без переходов, однако, не рекомендуются. При этом не ожидается, что результирующая схема будет более понятной, чем исходная. " :))
39 Shur1cIT
 
10.04.15
09:20
переход использовал последний раз в 7.7 кажется для удаление строк в цикле. в 8 при подобном случае использую делаю через обратный порядок, через отбор, через запрос
40 Альбатрос
 
10.04.15
09:21
Безусловные переходы зло...
41 ShoGUN
 
10.04.15
09:23
Насчёт меток - они запутывают код. Хотя иногда и наоборот, с ними понятней, чем без них, но это очень редко. В 1С метки, пожалуй, можно использовать только для выхода из нескольких вложенных циклов, так будет понятней, чем городить флаги.
42 Fish
 
10.04.15
09:24
(40) Обоснуй.
43 Ненавижу 1С
 
гуру
10.04.15
09:27
вот наконец и выросло поколение незнающее GOTO
44 Loki Evil
 
10.04.15
09:28
(0) Это дурной знак, беги, спасайся :)
45 Лефмихалыч
 
10.04.15
09:29
(42) (34)
46 Fish
 
10.04.15
09:30
(45) До конца не читал? Читай (38) :))
47 К_Дач
 
10.04.15
09:32
(26) насчет контекста не совсем понятно.

Вот есть код:

Алгоритм1, Алгоритм2 и Алгоритм3 - все располагаются в контексте модуля объекта например.

использование GoTo

1. Алгоритм1, возвращающий Результат
2. Если Результат = А Тогда GoTo Алгоритм3 Иначе Алгоритм2, Алгоритм3 Конец

без GoTo

Алгоритм3 представлен отдельной функцией ФункцияАлг3,
располагается также в контексте модуля объекта

1. Алгоритм1, возвращающий Результат
2. Если Результат = А Тогда ФункцияАлг3 Иначе Алгоритм2, ФункцияАлг3 Конец

Где тут смена контекста для варианта с GoTo?
48 etc
 
10.04.15
09:37
LD B,40h
LOOP:  DEC B
       ......
       JR NZ,LOOP

Оттуда метки и пошли. В остальном они не нужны.
49 Herby
 
10.04.15
09:38
(32) я же написал что про "сплошь и рядом" я тоже против, но если раз в 5 лет где-то я применил эту конструкцию и она была оправдана, то ничего дурного я в этом не вижу.

К примеру в sql запросах также плохим тоном считается использование курсоров. Но тут тоже надо понимать где их можно применять, а где нельзя..

У меня есть пара решений на курсорах, но это вполне оправдано, потому что временные таблицы в которых я выполняю действия с помощью курсоров слишком малы и на производительность это не влияет... Хотя какой нибудь умник увидит и завизжит - "аааа - курсоры - гомнокод палюбому"
50 Лефмихалыч
 
10.04.15
09:48
(47) контекст будет порван к куям у тебя в голове, когда ты начнешь читать листинг этого кода. Или примешься отлаживать по шагам.

Еще раз, по буквам для пущей понятности: готы вредны не по соображениям функционирования скомпилированного исполняемого файла, а по соображениям сопровождения исходного кода.
51 Fish
 
10.04.15
09:50
(50) Всё-таки не осилил свою ссылку прочитать? Давай ещё раз процитирую:
"При этом не ожидается, что результирующая схема будет более понятной, чем исходная. "
52 К_Дач
 
10.04.15
09:56
(50) я поэтому и уточнил про контекст, потому что при компиляции в обоих случаях результат будет одинаковый. Про то, что сопровождать такой код проблематично - и ежу понятно
53 СвинТуз
 
10.04.15
09:57
поколение пепси не знает что такое метка
54 Fish
 
10.04.15
09:59
Кстати, тем кто кричит, что безусловные переходы - зло, предлагаю так же никогда не использовать операторы Прервать, Продолжить, и Возврат.
55 К_Дач
 
10.04.15
10:05
(54) +1. И еще GoTo - основной инструмент при обфускации кода. Так что просто пользоваться надо с умом, точно так же, как малая доза препарата в медицине является лекарством, а большая доза того же препарата - ядом
56 Лефмихалыч
 
10.04.15
10:16
(51) если ты не заметил, там перед этим дохренища букв, которые описывают вред от готов, а последняя вот эта, которой ты меня уже зателепал, всего-лишь говорит: "готы не являются абсолютным злом, ибо ни чего в реальном мире не абсолютно"
57 Fish
 
10.04.15
10:29
(56) Ты наверное невнимательно читал. Вся статья говорит не о вреде о готов, как таковых, а лишь о вреде "Разнузданного применения оператора go to". А ты свою ссылку привёл, как обоснование поста (40), где как раз написано, что безусловные переходы - зло.
58 Адский плющ
 
10.04.15
10:30
(54) Хрен и трамвайная ручка.

Прервать, Продолжить, и Возврат - оперируют вполне себе объектами - циклом и процедурой. А гото нихрена ничем не оперирует - в реальной жизни аналогов такому нет.
59 Fish
 
10.04.15
10:32
(58) Да ты что? Правда что ли? :))
60 Лефмихалыч
 
10.04.15
10:32
(57) если дать тебе на выбор для сопровождения эквивалентный код с готами и без, какой ты выберешь? Честно только и в общем случае.
61 Fish
 
10.04.15
10:34
(60) Всё зависит от конкретного алгоритма и конкретного кода. А рассуждая о сферическом алгоритме в вакууме, я вполне согласен с заключительным суждением Декстера, каковое процитировал выше.

И что ты скажешь про другие операторы безусловного перехода, приведённые в (54)?
62 Fish
 
10.04.15
10:37
(60) И да, мне, как программисту с образованием, не составляет особого труда разобраться как в коде с готами, так и без таковых. А по опыту скажу: бывает, что код с готами идеально читаем, и наоборот: вроде ни одного гото нет, а всё равно нечитаемо :)
63 Адский плющ
 
10.04.15
10:46
Код должен отражать реальность, а не буйные фантазии очередного гогнокодера.

В реальности, выполняя некую повторяющуюся работу, можно по неким причинам перейти к следующему элементу (продолжить), можно прекратить её (прервать).

А "гото" это как сидишь на толчке и внезапно оказываешься в консерватории.

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

А те кто не пишут "гото", делают это не потому что Дейкстра запретил. А потому что при правильном образе мышления его тупо негде использовать.
64 Лефмихалыч
 
10.04.15
10:49
(62) я тебе не верю
65 Ненавижу 1С
 
гуру
10.04.15
10:50
(62) приводи такой код
66 Fish
 
10.04.15
10:50
(64) Можешь не верить. Твоё право.
67 Fish
 
10.04.15
10:52
(65) Нечитаемый код без гото? Открой любую конфу от Раруса :)
68 Domovoi
 
10.04.15
10:53
Думается с читабельностью все нормально, проблема в том, что часто мы накручиваем код все больше и больше и порой приходится выделять процедуры, в части случаев гото не даст нам такой возможность.

К примеру явное применение

Пока Истина Цикл
Для Каждого Элемент Из МассивЭлементов Цикл
  Если ВыполнениеУсловия(Элемент) Тогда
   Перейти ~ВыходИзДвойногоЦикла;
  КонецЕсли;
  ...
КонецЦикла;
КонецЦикла;
~ВыходИзДвойногоЦикла:

Через условия и прервать явно будет больше кода и нечетабельнее.
69 Torquader
 
10.04.15
11:02
(29) Спагетти-код, это когда мы из одной функции вызываем другую, из другой - третью и так далее, а в десятой будет А=Б.

Когда пишется код, который является подобием клеточного автомата, то есть система переходит в одно из допустимых состояний - то описание этого процесса через метки выглядит куда более читаемо, чем всякие множественные проверки на состояние, и не забываем, что в языке 1С switch-ей нету.
70 Torquader
 
10.04.15
11:04
Просто, берёшь любую типовую и в функции работы с оборудованием всегда "Если Результат=НЕОПРЕДЕЛЕНО Тогда" в начале каждого блока действий - выглядит достаточно глупо, но нет - метки использовать нельзя, а сделать просто "Возврат" - тоже, так как обработка ошибок в конце находится.
71 Fish
 
10.04.15
11:06
(68) +100. А те, кто плохо учился программированию, не понимают, что по своей сути операторы перейти и прервать - это одно и то же, за исключением того, что прервать - это безусловный переход к заранее определённой строке, и начинают втирать, что прервать - это хорошо, а перейти к оператору, следующему за концом цикла - это плохо :)
72 Torquader
 
10.04.15
11:13
(71) Кому-то и "Пока Истина Цикл" душу греют.
73 bodri
 
10.04.15
11:16
Мое ИМХО, если Goto есть значит не чего в этом плохого нет и использовать его тоже можно хоть постоянно это дело каждого индивидуально.
74 moon_sparckle
 
10.04.15
11:16
Мне в лицее как-то банан влепили за то что я посмела готу использовать ...с тех пор психологический барьер на них.
75 Ganiev
 
10.04.15
11:20
(74) Страшный какой-то у тебя лицей!
76 Domovoi
 
10.04.15
11:21
(74)Если б знала для чего использовала готу, никто бы ничего не влепил.
77 moon_sparckle
 
10.04.15
11:21
ууу.Жители Челябинска знают 31 лицей )))
78 Domovoi
 
10.04.15
11:22
(75)Это нормально, просто в лицеях надо доказывать что применение твоей закарючке в данных ситуациях наиоптимальнийший вариант.
79 Ganiev
 
10.04.15
11:28
Всегда стоит вопрос оптимальности кода в иных случаях "Перейти" отрабатывает быстрее чем мониторинг всех условий в коде предшествующих метке! и не кто вам не банан не апельсин не влепит если это будет оправданна!