|
"~Начало:" - что значит эта строка в коде | ☑ | ||
---|---|---|---|---|
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
|
Всегда стоит вопрос оптимальности кода в иных случаях "Перейти" отрабатывает быстрее чем мониторинг всех условий в коде предшествующих метке! и не кто вам не банан не апельсин не влепит если это будет оправданна!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |