|
Теорема Бома — Якопини реалистична? или снова про goto | ☑ | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0
MatrosoV AleXXXand_R
28.06.11
✎
15:32
|
Теорема Бома — Якопини — утверждение о структурном программировании, согласно которому любой исполняемый алгоритм может быть преобразован к структурированному виду, то есть такому виду, когда ход его выполнения определяется только при помощи трёх структур управления: последовательностей (sequence), ветвлений (selection) и повторов (repetition).
Теорема была сформулирована и доказана итальянскими математиками Коррадо Бомом (англ. Corrado Böhm) и Джузеппе Якопини (Giuseppe Jacopini) в их статье 1966 года[1]. В статье также описывались методы преобразования неструктурированных алгоритмов в структурированные. Публикация теоремы была толчком к началу дебатов о структурном программировании. Спустя 2 года вышла статья Эдсгера Дейкстры «Go To Statement Considered Harmful»[2], в которой он критиковал использование оператора GOTO и высказывался в пользу улучшения стиля программного кода за счёт использования структур управления и отказа от других инструкций, управляющих ходом алгоритма. wiki:Теорема_Бома_—_Якопини А как вы считаете - можно ли обойтись в программировании без GOTO (Перейти)? И считается ли плохим стилем программирования его использование или нет? |
|||||||||||||
1
povar
28.06.11
✎
15:33
|
я бы убивал за метки
|
|||||||||||||
2
Волшебник
28.06.11
✎
15:33
|
Лучше не использовать, но с осторожностью вполне можно применять.
Использовать можно, но в крайнем случае |
|||||||||||||
3
Aswed
28.06.11
✎
15:33
|
Да можно, обхожусь.
Нет, не считаю, кто то использует и пусть использует дальше. Другое |
|||||||||||||
4
Господин ПЖ
28.06.11
✎
15:33
|
баян
|
|||||||||||||
5
Grusswelle
28.06.11
✎
15:34
|
(0) За исключением Ассемблера. И то, можно извратиться без меток.
Да, GOTO - нельзя использовать |
|||||||||||||
6
butterbean
28.06.11
✎
15:34
|
больше GOTO хороших и разных
Лучше использовать, чем чаще, тем лучше |
|||||||||||||
7
Мыш
28.06.11
✎
15:34
|
А я бы заставлял мучиться вечно.
|
|||||||||||||
8
Скользящий
28.06.11
✎
15:34
|
Метки это как бомба в коде.
|
|||||||||||||
9
Волшебник
28.06.11
✎
15:34
|
||||||||||||||
10
Волшебник
28.06.11
✎
15:35
|
Полезные применения GOTO
* Выход из циклов многократной вложенности. * Переход на точку выхода из функции. * Переход в начало процедуры |
|||||||||||||
11
ДенисЧ
28.06.11
✎
15:36
|
баян немеряный, ещё с 68го года :-)
Нас этому в 93м учили... Использовать можно, но в крайнем случае |
|||||||||||||
12
H A D G E H O G s
28.06.11
✎
15:36
|
Именно так.
Лучше использовать, чем чаще, тем лучше |
|||||||||||||
13
Deni7
28.06.11
✎
15:37
|
(0) Если упрощает код и понимание кода, то почему бы и нет?
Использовать можно, но в крайнем случае |
|||||||||||||
14
MatrosoV AleXXXand_R
28.06.11
✎
15:37
|
А в типовых - как-то не обращал внимание - часто метки применяются?
|
|||||||||||||
15
Mort
28.06.11
✎
15:37
|
Использование программистом GOTO означает, что при кодировании, мысленно он управляет программным потоком, а не абстракциями. Короче, я бы такого не взял.
Да, GOTO - нельзя использовать |
|||||||||||||
16
Волшебник
28.06.11
✎
15:39
|
(15) Программист обязан мысленно управлять программным потоком, а не абстракциями.
Абстракциями должен управлять системный аналитик, системный архитектор. |
|||||||||||||
17
Эльниньо
28.06.11
✎
15:39
|
Так
Использовать можно, но в крайнем случае |
|||||||||||||
18
Mort
28.06.11
✎
15:41
|
(16) Тут либо трусы, либо крестик. Таблица значений тоже абстракция. Либо используешь объекты, или строчки кода расставляешь.
|
|||||||||||||
19
Mort
28.06.11
✎
15:42
|
У вменяемого прога ситуации в (10) не возникают.
|
|||||||||||||
20
FoXSkr
28.06.11
✎
15:45
|
1. Да, GOTO - нельзя использовать
|
|||||||||||||
21
Волшебник
28.06.11
✎
15:51
|
Увлечение структурным программированием и архитектурой фон Неймана (в том числе отказ от GOTO) препятствует созданию мыслящих машин, распознающих образы, решающих неструктурированные задачи с неполными и приблизительными исходными данными. На выходе из-под пера программиста мы получаем тупые безмозглые автоматы, которые идут строго вперёд без отклонений.
|
|||||||||||||
22
Fragster
гуру
28.06.11
✎
15:54
|
(21) дада, гото в произвольное место кода - то, что нам нужно дли ИИ (половина мистян такие, а модераторы - так вообще все)
гото - просто низкоуровневая замена более красивым конструкциям Использовать можно, но в крайнем случае |
|||||||||||||
23
Fragster
гуру
28.06.11
✎
15:55
|
вот на что смотреть надо:
wiki:Цикломатическая_сложность |
|||||||||||||
24
MatrosoV AleXXXand_R
28.06.11
✎
16:06
|
А я думаю все равно так
Использовать можно, но в крайнем случае |
|||||||||||||
25
Scooter
28.06.11
✎
16:08
|
я в 1с даже не знаю как это писать
Да, GOTO - нельзя использовать |
|||||||||||||
26
MatrosoV AleXXXand_R
28.06.11
✎
16:10
|
(25)
Перейти ~Метка1; .... ~Метка1: |
|||||||||||||
27
Гость2
28.06.11
✎
16:10
|
Последние 13 лет не использую.
GOTO - удел стюдентов! |
|||||||||||||
28
Волшебник
28.06.11
✎
16:10
|
(25) Нашёл, чем хвастаться... Стыдись!
Перейти ~метка; ~метка: |
|||||||||||||
29
Волшебник
28.06.11
✎
16:11
|
(27) Студентам нельзя использовать GOTO, их преподы тут же опустят без вазелина, заставят выучить наизусть всего Дейкстру.
|
|||||||||||||
30
Steel_Wheel
28.06.11
✎
16:11
|
Вполне можно использовать при выходе из ветвлений глубокой вложенности
Использовать можно, но в крайнем случае |
|||||||||||||
31
Гость2
28.06.11
✎
16:14
|
(29) Это удел даже не "студентов" а "стЮдентов" - очень ЮННЫХ студентов
|
|||||||||||||
32
Lys
28.06.11
✎
16:15
|
(10): (применительно к 1С)
* "Выход из циклов многократной вложенности" - есть Возврат, но лучше всего - (19); * "Переход на точку выхода из функции" - Возврат; * "Переход в начало процедуры" - рекурсия. В моей практике ни разу не возникало задачи, которую можно было бы решить только через метки. И раза 3 приходилось переписывать после "пейсателей" код с метками - на код без меток. Правда, не исключаю, что я просто мало знаю. А посему: Использовать можно, но в крайнем случае |
|||||||||||||
33
MatrosoV AleXXXand_R
28.06.11
✎
16:16
|
(31) я когда учился в универе, нам преподовали - что метки вполне можно использовать. И когда мы в своих текстах программах на С++, Delphi писали конструкцию вида "Перейти" - никто не снижал нам оценку
|
|||||||||||||
34
Волшебник
28.06.11
✎
16:16
|
В машинном языке нет никаких циклов, ветвлений и процедур. Есть только GOTO
|
|||||||||||||
35
Ненавижу 1С
гуру
28.06.11
✎
16:17
|
(34) ветвления есть, иначе цикл из GOTO будет бесконечен
единственное оправдание GOTO это выход из многовложенных циклов, но вот в Java молодцы, придумали break с меткой и проблему решили |
|||||||||||||
36
MatrosoV AleXXXand_R
28.06.11
✎
16:17
|
нет ... в машинном языке все выглядит примерно так - 010001010100010001001111
:)) |
|||||||||||||
37
Lama12
28.06.11
✎
16:18
|
За 18 лет программирования использовал GoTo только на спекртуме. :)
Либо когда шла оптимизация на скорость. Использовать можно, но в крайнем случае |
|||||||||||||
38
Волшебник
28.06.11
✎
16:18
|
||||||||||||||
39
Grusswelle
28.06.11
✎
16:19
|
(38) Ну нафиг. Я лично (к чему и призываю) использую переменные-"флаги" в таких случаях. На каждый цикл, получается. Зато всё "видно" и, если что, расширябельно.
|
|||||||||||||
40
Fragster
гуру
28.06.11
✎
16:20
|
(38) там только "Программная генерация кода" нормально обоснована
|
|||||||||||||
41
Fragster
гуру
28.06.11
✎
16:20
|
(39) надо функции использовать вместо флагов
|
|||||||||||||
42
Волшебник
28.06.11
✎
16:21
|
(41) Надо использовать GOTO!
|
|||||||||||||
43
Mort
28.06.11
✎
16:22
|
(38) Вообще обход матрицы в теле процедуры практически всегда является "смешением уровней абстракций на одну процедуру" (Фаулер. "Чистый код") т.е. не вдаваясь в объяснения, поиск в коллекции должна выполнять отдельная процедура (идеально, метод коллекции). А в ней уже возврат.
|
|||||||||||||
44
Grusswelle
28.06.11
✎
16:22
|
(41) Ну почему...
УсловиеВерно = (А = Б) - например... ...Если что - изменяешь его и выходишь благополучно откуда надо. Просто выбешивают меня эти метки, эти GoTo... |
|||||||||||||
45
Ненавижу 1С
гуру
28.06.11
✎
16:22
|
(42) можно, но не нужно
|
|||||||||||||
46
Grusswelle
28.06.11
✎
16:22
|
(42) Сам-то используешь?
|
|||||||||||||
47
Mort
28.06.11
✎
16:22
|
+(43) Вру, не Фаулер, Роберт Мартин
|
|||||||||||||
48
Starhan
28.06.11
✎
16:23
|
собсна юзал ток на ассемблере (а еще в паскале в школе :)). Ума не приложу где бы пригодилось, если ток ты не кодишь 2ю неделю и тебе дали пространственную задачу.
|
|||||||||||||
49
Ненавижу 1С
гуру
28.06.11
✎
16:23
|
почему в 1С не додумались сделать оператор
Прервать ~метка; |
|||||||||||||
50
Ахиллес
28.06.11
✎
16:23
|
(38) Убогий программист генерящий невразумительный чересчур сложный код, убогая среда исполнения и убогая утилита. Вот и все оправдания GOTO.
Да, GOTO - нельзя использовать |
|||||||||||||
51
Волшебник
28.06.11
✎
16:23
|
(46) Если понадобится, то буду использовать и не буду комплексовать по этому поводу.
|
|||||||||||||
52
vladko
28.06.11
✎
16:24
|
я использую лишь при переборе строк документа и удаление ненужных, т.к. при удалении следующая строка проскакивает необработанной:
~Выбор: ВыбратьСтроки() Пока ПолучитьСтроку() = 1 Цикл Если <УсловиеУдаленияСработало> тогда Удалитьстроку(); Перейти ~Выбор; КонецЕсли; КонецЦикла; Какой алгоритм без перехода? Использовать можно, но в крайнем случае |
|||||||||||||
53
ZloyBuhgalter
28.06.11
✎
16:24
|
Когда-то рисовал проги без меток. ;)
Вылетал из циклов просто в лоб меняя параметр цикла |
|||||||||||||
54
Волшебник
28.06.11
✎
16:24
|
Меня вот бесит, когда по телу функции разбросаны Возвраты. Уж лучше сделать одну точку выхода и по телу функции использовать GOTO ~Выход
|
|||||||||||||
55
Гость2
28.06.11
✎
16:25
|
(51) А на данный момент?
Когда последний раз? |
|||||||||||||
56
Midaw
28.06.11
✎
16:25
|
(54) ну они же подсвечены
|
|||||||||||||
57
Ненавижу 1С
гуру
28.06.11
✎
16:25
|
вот как в 1С можно относиться к рекомендации писать методы не более экрана примерно, если тексты запросов иногда...
хотя можно это считать исключением из правил |
|||||||||||||
58
Волшебник
28.06.11
✎
16:25
|
(52) Неоправданное применение. Надо делать двумя циклами, или перебирать в обратном порядке (снизу).
|
|||||||||||||
59
Grusswelle
28.06.11
✎
16:25
|
Использование GoTo - удел маргиналов, невежественной босоты и прочих неучей. Вы уж простите.
Да, GOTO - нельзя использовать |
|||||||||||||
60
Midaw
28.06.11
✎
16:26
|
(52) можно закинуть элементы в массив и удалять их с массива, но и это как то криво :)
|
|||||||||||||
61
Ненавижу 1С
гуру
28.06.11
✎
16:26
|
(52) обход в обратном направлении спасет
|
|||||||||||||
62
Волшебник
модератор
28.06.11
✎
16:26
|
(55) Не переходи на личности.
|
|||||||||||||
63
Midaw
28.06.11
✎
16:26
|
честно забыл о существовании ПЕРЕЙТИ в коде... в типовом оно точно не встречается.
|
|||||||||||||
64
Fragster
гуру
28.06.11
✎
16:26
|
(52)
Для Сч = -КоличествоСтрок() По -1 Цикл Если УсловиеСработало Тогда УдалитьСтроку(-Сч); КонецЕсли КонецЦикла; |
|||||||||||||
65
Гость2
28.06.11
✎
16:26
|
(52) По рукам линейкой за такой код
|
|||||||||||||
66
Волшебник
модератор
28.06.11
✎
16:26
|
(64) Отлично!
|
|||||||||||||
67
Fragster
гуру
28.06.11
✎
16:27
|
(64)+ и ведь работает не в пример быстрее
|
|||||||||||||
68
Ненавижу 1С
гуру
28.06.11
✎
16:27
|
(54) это те же яйца, только в профиль ))
|
|||||||||||||
69
Ахиллес
28.06.11
✎
16:27
|
(52) НайтиСтроки() или запрос к табличной части.
|
|||||||||||||
70
Midaw
28.06.11
✎
16:27
|
(64) не читаемо
|
|||||||||||||
71
vladko
28.06.11
✎
16:27
|
(64) спасибо
|
|||||||||||||
72
Ненавижу 1С
гуру
28.06.11
✎
16:27
|
а еще бесит неоправданное юзание Попытка везде и всюду
|
|||||||||||||
73
Волшебник
28.06.11
✎
16:27
|
(69) А если условие сложное и документ ещё не записан?
|
|||||||||||||
74
Grusswelle
28.06.11
✎
16:28
|
(64) +1. Ну не GoTo же...
Да, GOTO - нельзя использовать |
|||||||||||||
75
Гость2
28.06.11
✎
16:28
|
(62) Почему?
Я написал об этом и не стесняюсь. 13 лет назад. |
|||||||||||||
76
Ненавижу 1С
гуру
28.06.11
✎
16:28
|
(70) да ладно, это классика
|
|||||||||||||
77
Mort
28.06.11
✎
16:28
|
(54) А толку? Наоборот вместо понимания что выходим из функции, прог читающий код должен искать метку. Любую функцию получается развернуть чтобы в неё был один возврат, но это фетиш, реально читабельность не растет. Лучше не делать монструозных функций.
|
|||||||||||||
78
Волшебник
28.06.11
✎
16:28
|
(72) А меня бесит использование Процедур вместо Функций. Тем более возвращаемое значение можно игнорировать.
|
|||||||||||||
79
Fragster
гуру
28.06.11
✎
16:28
|
(70) т.е. для того, чтобы удалить каждую вторую строку нужно пройтись по ТЧ 100500 раз?
|
|||||||||||||
80
Grusswelle
28.06.11
✎
16:28
|
(73) Массив условий делаем. Или структуру. Условий или их результатов.
|
|||||||||||||
81
Midaw
28.06.11
✎
16:29
|
(79) нет, свой вариант я уже написал. закидываешь отобранные строки в массив. оттуда все одним перебором спокойно удаляется.
|
|||||||||||||
82
Волшебник
28.06.11
✎
16:29
|
(77) Надо правильно назвать метку, например, ~ВыходИзФункции
|
|||||||||||||
83
Ненавижу 1С
гуру
28.06.11
✎
16:30
|
(78) о, так это Гений 1С предлагал
вопрос довольно таки спорный, процедура явно говорит, что ничего ты из нее получить не сможешь |
|||||||||||||
84
Fragster
гуру
28.06.11
✎
16:31
|
(81) в 7.7 нету строк, есть только индексы. а при удалении строки индексы всех последующих строк - изменяются.
|
|||||||||||||
85
Grusswelle
28.06.11
✎
16:31
|
(82) "Возврат" есть же...
|
|||||||||||||
86
Mort
28.06.11
✎
16:31
|
(81) +1. Получается длиннее, зато читабельно, что гораздо важнее.
|
|||||||||||||
87
Волшебник
28.06.11
✎
16:32
|
(85) Вот меня бесят стопицот возвратов.
|
|||||||||||||
88
Midaw
28.06.11
✎
16:32
|
(84) ну её 7.7. там вообще все плохо )
|
|||||||||||||
89
Ненавижу 1С
гуру
28.06.11
✎
16:32
|
+(85) уже писал в (68)
|
|||||||||||||
90
Mort
28.06.11
✎
16:32
|
(87) А стопицот меток ~ВыходИзФункции не бесят?
|
|||||||||||||
91
Волшебник
28.06.11
✎
16:32
|
(90) Нет
|
|||||||||||||
92
Лефмихалыч
28.06.11
✎
16:32
|
ибо даже любой из примеров "оправданного" применения можно переписать без готов и от этого станет только читабельнее
Да, GOTO - нельзя использовать |
|||||||||||||
93
Ненавижу 1С
гуру
28.06.11
✎
16:33
|
(87) да ладно, неужели есть такое? обычно в функции юзается переменная Результат, которая в конце и возвращается, ну и условия рулят
|
|||||||||||||
94
Ненавижу 1С
гуру
28.06.11
✎
16:33
|
(91) странный
|
|||||||||||||
95
Midaw
28.06.11
✎
16:34
|
(87) обычно алгоритм можно упростить и возвратов становиться намного меньше.
|
|||||||||||||
96
Lys
28.06.11
✎
16:34
|
(87) Практически любую функцию можно написать так, что Возвраты в ней будут только в начале (проверки входных параметров и т.п.) и в конце - возврат результата.
|
|||||||||||||
97
Ненавижу 1С
гуру
28.06.11
✎
16:34
|
Так, следующая тема будет про строгую типизацию, наследование и виртуальные методы?
|
|||||||||||||
98
Grusswelle
28.06.11
✎
16:34
|
(87) Не, ну в идеале - возврат должен быть один. Максимум - два, если
Если ... Тогда Возврат А Иначе Возврат Б КонецЕсли; ^^^^^^^^^^^^^^ но не больше. В остальных случаях я лично рекомендовал бы (да и сам так делаю) формировать некую переменную, назовём её "Результат", и в конце функции - один единственный "Ыозврат Результат". И НИКАКИХ GOTO! Да, GOTO - нельзя использовать |
|||||||||||||
99
Волшебник
28.06.11
✎
16:35
|
(97) Ненавижу множественное наследование!
|
|||||||||||||
100
Ненавижу 1С
гуру
28.06.11
✎
16:35
|
100
|
|||||||||||||
101
Волшебник
28.06.11
✎
16:35
|
(98) Спасибо, кэп!
|
|||||||||||||
102
andrewks
28.06.11
✎
16:35
|
про баян уже говорили?
Использовать можно, но в крайнем случае |
|||||||||||||
103
Grusswelle
28.06.11
✎
16:36
|
(101) Обращайся! ;-)
Да, GOTO - нельзя использовать |
|||||||||||||
104
Ненавижу 1С
гуру
28.06.11
✎
16:36
|
(99) я тоже против, но интерфейсы (как более мягкий вариант его) никто не отменяет
|
|||||||||||||
105
Fragster
гуру
28.06.11
✎
16:36
|
а отказ пир проверке входных данных осуществлять через
ВызватьИсключение "что вы в меня всякую гадость суете?" |
|||||||||||||
106
Steel_Wheel
28.06.11
✎
16:38
|
(105)
ВсеОК = ПроверитьВходныеДанные(); Если ВсеОК Тогда СДелатьЧтото(); КонецЕсли; |
|||||||||||||
107
Волшебник
28.06.11
✎
16:38
|
(105) Да, это стильно, модно, современно.
|
|||||||||||||
108
andrewks
28.06.11
✎
16:39
|
(105) я NS тоже предлагал исключения - понимания не нашёл. он меня убедил, что в крайних-крайних случаях без гоуту ну просто никуда
|
|||||||||||||
109
МастерВопросов
28.06.11
✎
16:40
|
(1) а что такого дико страшного в Go to, что люди теоремы доказывают, темы создают?
|
|||||||||||||
110
Fragster
гуру
28.06.11
✎
16:40
|
(106) ну и нафига лишний уровень вложенности? тогда уж
Если ПроверитьПараметр1() Тогда Если ПроверитьПараметр2() Тогда Если ПроверитьПараметр2() Тогда ДелаемЧтоТо(); КонецЕсли; КонецЕсли; КонецЕсли; |
|||||||||||||
111
Grusswelle
28.06.11
✎
16:41
|
(109) GoTo НЕЛЬЗЯ использовать. НЕЛЬЗЯ. И всё. Это - как плод греха у Адама и Евы. Он - есть, но использовать его НЕЛЬЗЯ.
Да, GOTO - нельзя использовать |
|||||||||||||
112
Midaw
28.06.11
✎
16:41
|
(109) сама основа структурного программирования ломается...
|
|||||||||||||
113
wPa
28.06.11
✎
16:42
|
На 1С ни разу не пользовал. А зачем? )
Использовать можно, но в крайнем случае |
|||||||||||||
114
Steel_Wheel
28.06.11
✎
16:43
|
(110) Хороший выход -- бросить исключение, но есть языки, в которых исключения нельзя типизировать -- весь смысл теряется
|
|||||||||||||
115
Волшебник
28.06.11
✎
16:43
|
(111) Это ваши комплексы. Свободные люди вправе использовать GOTO когда хотят и теоремы Бома-Якопини им не указ.
|
|||||||||||||
116
Ненавижу 1С
гуру
28.06.11
✎
16:44
|
злоупотребляете исключениями
|
|||||||||||||
117
andrewks
28.06.11
✎
16:44
|
по сути, исключение - это то же самое гоуту.
как, впрочем и функции |
|||||||||||||
118
Midaw
28.06.11
✎
16:45
|
Если ЗначениеЗаполнено(Объект.Родитель) И Объект.Родитель.Родитель=ПустаяСсылка Тогда
Сообщить("ПустаяСсылка"); КонецЕсли; всегда считал неправильной конструкцией в определенной ситуации. а вроде бы работает... но боюсь таких конструкций, всегда пишут так. Если ЗначениеЗаполнено(Объект.Родитель) Тогда Если Объект.Родитель.Родитель=ПустаяСсылка Тогда Сообщить("ПустаяСсылка"); КонецЕсли; КонецЕсли; пример не из жизни, а как самый наглядный. |
|||||||||||||
119
andrewks
28.06.11
✎
16:45
|
+(117) кто на асмах писАл, того не проведёшь
|
|||||||||||||
120
Волшебник
28.06.11
✎
16:46
|
(118) надо так:
Если Объект.Родитель.Родитель.Пустая() Тогда |
|||||||||||||
121
МастерВопросов
28.06.11
✎
16:48
|
(111) вот на таких стереотипах я и вырос, теперь даже не могу представить где бы уместно было применить go to.
А в школе, помню, активно его в basic-e использовал..., но шаблоны меня "поломали". Так же никто толком не может объяснить шаблон: "в реляционных базах данных необходимо максимально часто использовать запросы". Хотя "выгрузитьитоги", "сводныйитог" реально быстрее работает. НЕЛЬЗЯ использовать. НЕЛЬЗЯ.....НЕЛЬЗЯ использовать. НЕЛЬЗЯ....НЕЛЬЗЯ использовать. НЕЛЬЗЯ...НЕЛЬЗЯ использовать. НЕЛЬЗЯ...НЕЛЬЗЯ использовать. НЕЛЬЗЯ....НЕЛЬЗЯ использовать. НЕЛЬЗЯ...НЕЛЬЗЯ использовать. НЕЛЬЗЯ...НЕЛЬЗЯ использовать. НЕЛЬЗЯ. |
|||||||||||||
122
Grusswelle
28.06.11
✎
16:48
|
(115) Нет никаких комплексов. Это как цианистый калий - он есть, но использовать его нельзя. Это как водородная бомба! GoTo, конечно, может легко решить многое, но те, кто прибегает к его использованию автоматически характеризуют себя не с лучшей стороны. Такое впечатление, что разработчики языков то и дело смеются над нами, не исключая этот оператор из синтаксиса языка.
Да, GOTO - нельзя использовать |
|||||||||||||
123
abitfrosty
28.06.11
✎
16:48
|
Еще ни разу не встречал ситуации, где использование меток было бы необходимостью.
Да, GOTO - нельзя использовать |
|||||||||||||
124
Волшебник
28.06.11
✎
16:49
|
(122) Даже сам Никлаус Вирт, изобретатель языка Паскаль, был вынужден добавить GOTO в язык.
|
|||||||||||||
125
МастерВопросов
28.06.11
✎
16:50
|
(122) а кроме живописных аллегорий будут вменяемые аргументы?
|
|||||||||||||
126
Grusswelle
28.06.11
✎
16:50
|
(124) Он это делал под стволом у виска!
Да, GOTO - нельзя использовать |
|||||||||||||
127
Волшебник
28.06.11
✎
16:51
|
(126) Накрутки детектед. Ты проголосовал уже 8 раз.
|
|||||||||||||
128
Grusswelle
28.06.11
✎
16:52
|
(127) Потому, что GoTo НЕЛЬЗЯ использовать!
Да, GOTO - нельзя использовать |
|||||||||||||
129
Волшебник
28.06.11
✎
16:54
|
(128) Я разрешаю
Использовать можно, но в крайнем случае |
|||||||||||||
130
Jstunner
28.06.11
✎
16:55
|
любой "возврат" и "прервать", тоже goto в той или иной степени
|
|||||||||||||
131
Sk0rp
28.06.11
✎
16:55
|
Тем, кто за первый вариант. Вы на ассемблере попробуйте без jmp программу написать. Или оптимизировать рендер в 3Д движке, когда за каждый лишний обработанный полигон в секунду анус рвешь.
Для каждого инструмента есть своя область применения. Не нужно ни злоупотреблять, ни огульно хаять. Надо знать и уметь использовать. Использовать можно, но в крайнем случае |
|||||||||||||
132
Ахиллес
28.06.11
✎
16:56
|
В КА последнем релизе находится 1165 конструкций Перейти ~
Стоит ли удивляться, что конфа получилась просто кучей кала. |
|||||||||||||
133
romix
28.06.11
✎
16:56
|
Преимущество goto - его использование приближено к действительной логике процессора (jmp) и его легко понять новичку.
Недостаток - надо придумывать тучу имен меток и не видно направления перехода (вверх или вниз). Цикл с предпроверкой условия также реализуется на goto неаккуратно (на двух метках). Исключения, кстати, - полезный оператор - им кодеры старой школы не владеют, а это - революционная подвижка по устойчивости кода. Другое |
|||||||||||||
134
Ненавижу 1С
гуру
28.06.11
✎
16:57
|
(124) он потом убрал его в модула-2 на свалку
|
|||||||||||||
135
Jstunner
28.06.11
✎
16:57
|
(132) если оттуда убрать Перейти ~, вряд ли конфигурация от этого улучшится
|
|||||||||||||
136
andrewks
28.06.11
✎
16:57
|
(132) просьба не путать гамнокод со структурным программированием и не вмешивать сюда гоуту
|
|||||||||||||
137
Grusswelle
28.06.11
✎
16:57
|
||||||||||||||
138
Ненавижу 1С
гуру
28.06.11
✎
16:59
|
(133) угу, очень, натыкались:
Попытка ... ВызватьИсключение(); аналог гото ... АТутЕщеОднаОшибка(); //внезапно потом дорисовали ... Исключение //аналог метки КонецПопытки; и главное все работает! но криво правда |
|||||||||||||
139
Sk0rp
28.06.11
✎
16:59
|
(133) Исключения до сих пор компиляторами с большими пенальти по производительности реализуются. В real-time коде его использовать плохо.
А для прикладных языков, где секунда туда / секунда сюда значения не имеет - да, очень удобно. |
|||||||||||||
140
Волшебник
28.06.11
✎
17:00
|
(134) Сравни, где Паскаль и где модула-2
|
|||||||||||||
141
andrewks
28.06.11
✎
17:01
|
предлагаю провести дружеский футбольный матч:
Сторонники goto vs Противники goto по результатам оного и решим :-) |
|||||||||||||
142
Ахиллес
28.06.11
✎
17:01
|
(135,136) А конфа сама собой пишется? Тысяча гоуту в одной конфе пишут те же люди, которые не спускают воду после себя в сортире. Неряхи в принципе не способны выдать нормальный код. Это уже органическое поражение мозга.
|
|||||||||||||
143
Волшебник
28.06.11
✎
17:01
|
(141) Без трамватики не обойдётся
|
|||||||||||||
144
Ненавижу 1С
гуру
28.06.11
✎
17:01
|
(140) не забывай что практически весь паскаль реальный это производное от турбопаскаля, просто ему повезло больше с реальным компилятором
|
|||||||||||||
145
andrewks
28.06.11
✎
17:02
|
(142) программероиндусы и без гоуту тебе нахерачат такого - неделю разбираться будешь, так что не трынди
|
|||||||||||||
146
Ахиллес
28.06.11
✎
17:02
|
(141) Бейсбольные биты и цепи мотоциклетные выдавать на месте будут или свои приносить?
|
|||||||||||||
147
andrewks
28.06.11
✎
17:02
|
ну вот, вечно хорошую идею опошлят... :(
|
|||||||||||||
148
Волшебник
28.06.11
✎
17:03
|
(144) Гнилые отмазки. В самых крутых языках есть GOTO:
С, С++, C# |
|||||||||||||
149
Sk0rp
28.06.11
✎
17:04
|
(34) Глупости какие. Есть и ветвления (условные переходы) и циклы.
|
|||||||||||||
150
Ахиллес
28.06.11
✎
17:04
|
(148) Специально оставили. Дабы можно было отделить агнецов от козлищ.
|
|||||||||||||
151
Ненавижу 1С
гуру
28.06.11
✎
17:05
|
(148) что же ты Java так опустил?
|
|||||||||||||
152
Wasya
28.06.11
✎
17:05
|
(138) Продолжить; Прервать; это тоже гооту.
|
|||||||||||||
153
Ахиллес
28.06.11
✎
17:05
|
(152) Нет.
|
|||||||||||||
154
Lys
28.06.11
✎
17:05
|
Это развод! (с)
|
|||||||||||||
155
Ненавижу 1С
гуру
28.06.11
✎
17:05
|
(152) в контексте (138) не догнал
|
|||||||||||||
156
Grusswelle
28.06.11
✎
17:05
|
(148) Это забыли убрать! От "Бейсика" осталось!!! >:-Е
Да, GOTO - нельзя использовать |
|||||||||||||
157
andrewks
28.06.11
✎
17:06
|
(150) пора уже вылезать из своей 2-х цветной палитры
|
|||||||||||||
158
GreyK
28.06.11
✎
17:06
|
(0) Хорошо хоть теорема, а не аксиома, а то эти "английские ученые" такие ученые... :)
Использовать можно, но в крайнем случае |
|||||||||||||
159
andrewks
28.06.11
✎
17:06
|
(156) ещё раз проголосуешь - получишь чёрную метку
|
|||||||||||||
160
МастерВопросов
28.06.11
✎
17:06
|
(133) "Недостаток - надо придумывать тучу имен меток и не видно направления перехода (вверх или вниз). "
Ну для функций тоже надо придумывать кучу имен. Искать функцию тоже нисколько не быстрее. |
|||||||||||||
161
Jolly Roger
28.06.11
✎
17:07
|
б-о-й-а-н...
Да, GOTO - нельзя использовать |
|||||||||||||
162
Ахиллес
28.06.11
✎
17:08
|
(159) тебе жалко что ли? На мисте голосовалка это способ самовыражения. Голосуй хоть тыщу раз за то, что тебе нравится.
|
|||||||||||||
163
Grusswelle
28.06.11
✎
17:08
|
(159) Хорошо хоть, что не "голубую".
ЗЫ: А что это такое?! |
|||||||||||||
164
Кроха
28.06.11
✎
17:08
|
уже не помню когда использовал... разве при освоении программирования, так, попробовать...
можно обойтись и без нее Другое |
|||||||||||||
165
Rabbit
28.06.11
✎
17:08
|
Как только во всех ходовых языках появятся именованные циклы и break/continue [имя], так сразу метки можно будет полностью выбросить - ваять хоронилища состояний частенько напрягает.
Использовать можно, но в крайнем случае |
|||||||||||||
166
andrewks
28.06.11
✎
17:11
|
(162) мухлёж не приветствую. тем более в таком важном вопросе
|
|||||||||||||
167
Ненавижу 1С
гуру
28.06.11
✎
17:11
|
вот это круче:
Если ЭлементыФормы.Флажок.Значение=Истина Тогда ЭлементыФормы.ПолеВвода.Доступность=Ложь; ИначеЕсли ЭлементыФормы.Флажок.Значение=Ложь Тогда ЭлементыФормы.ПолеВвода.Доступность=Истина; КонецЕсли; |
|||||||||||||
169
andrewks
28.06.11
✎
17:12
|
(167) типичный код для начинающих
|
|||||||||||||
170
Волшебник
28.06.11
✎
17:13
|
(167) Да, прикольно. Правильнее будет так:
ЭлементыФормы.ПолеВвода.Доступность = НЕ Флажок; |
|||||||||||||
171
Grusswelle
28.06.11
✎
17:15
|
(170) ЭлементыФормы.ПолеВвода.Доступность = НЕ Флажок.Значение;
;-) |
|||||||||||||
172
МастерВопросов
28.06.11
✎
17:16
|
А считается признаком гамнокода фрагмент кода, вынесенный в отдельную функцию, причем эта функция отрабатывает всего лишь один раз?
А если эта функция экспортная и вынесена в обощий модуль? |
|||||||||||||
173
Волшебник
28.06.11
✎
17:16
|
(151) Java - недоязык. Там даже Goto нет
|
|||||||||||||
174
Волшебник
28.06.11
✎
17:16
|
(171) У тебя программа не сработает.
|
|||||||||||||
175
Ахиллес
28.06.11
✎
17:16
|
(166) Типа как тут проголосуют, так ты и будешь писать? А вот мне пофигу на голосовалку, моего мнения она не изменит.
|
|||||||||||||
176
Ненавижу 1С
гуру
28.06.11
✎
17:17
|
(173) вот шутник
|
|||||||||||||
177
Grusswelle
28.06.11
✎
17:17
|
(174) Ой, йооо...
ЭлементыФормы.ПолеВвода.Доступность = НЕ ЭлементыФормы.Флажок.Значение; |
|||||||||||||
178
Grusswelle
28.06.11
✎
17:18
|
(173) Ухожу в Java. Только по этой причине. ;-)))
|
|||||||||||||
179
Ненавижу 1С
гуру
28.06.11
✎
17:18
|
(170) вот, вот
|
|||||||||||||
180
andrewks
28.06.11
✎
17:18
|
(175) я понимаю, конечно, что статистика - лженаука, но текущий срез мнений был бы мне интересен. не для того, чтобы писать по-другому, а просто интересен.
а некоторые детишки балуются и лишают голосовалку какого-нибудь смысла |
|||||||||||||
181
Волшебник
28.06.11
✎
17:19
|
(177) В твоей программе много лишних символов.
|
|||||||||||||
182
Rabbit
28.06.11
✎
17:19
|
def SetStates(self):
sd_assgn = len(self.m_dirPicker2.Path) > 0 fd_assgn = len(self.m_dirPicker21.Path) > 0 use_fd = self.m_checkBox1.Value self.m_dirPicker21.Enable(use_fd) if use_fd and fd_assgn and not sd_assgn: self.m_dirPicker2.Path = self.m_dirPicker21.Path sd_assgn = True jobenabled = sd_assgn and (fd_assgn or not use_fd) self.m_button2.Enable(jobenabled) return jobenabled :-P |
|||||||||||||
183
andrewks
28.06.11
✎
17:20
|
(181) да он распалился так, что не вкурит :-)
|
|||||||||||||
184
Ахиллес
28.06.11
✎
17:24
|
(180) Напиши обработку для 1С с парсингом голосовалок мисты и выводом реального результата :-)
|
|||||||||||||
185
Mort
28.06.11
✎
17:38
|
(172) Нет. Это один из приемов рефакторинга.
|
|||||||||||||
186
Midaw
28.06.11
✎
17:42
|
(120) не факт, что сработает. если Родитель окажется НЕОПРЕДЕЛЕННО.
|
|||||||||||||
187
Mort
28.06.11
✎
17:46
|
(186) Это как так может получится?
|
|||||||||||||
188
Скептик
28.06.11
✎
17:50
|
(15) должен заметить, что некоторым аналогом инструкции GOTO применительно к фразеологии общепринятого русского языка можно полагать употребление знака "запятая" -- во многих случаях незаменимо, однако избыток указывает не только на слабое понимание высказывающимся основ основ грамоты, но и на весьма посредственное владение оного собственно предметом обсуждения.
Например: "Использование программистом GOTO означает, что при кодировании, мысленно он...". Запятые (что вполне очевидно) размещены интуитивно, более того -- наобум. Недостаток грамотности автор готов компенсировать количеством запятых, размещаемых по принципу "на всякий случай". И ведь это, увы, тенденция, весьма точно указывающая на способность очередного оратора к структуризации собственной мысли и, соответственно, способности применения "структурного программирования" на практике. Абстракция и обоснование мнения: честно говоря, до сих пор не могу понять как может более-менее связно писать на совершенно чуждом человеческой натуре "машинном языке" русскоязычный автор, не вполне владеющий совершенно естественным, более того -- повседневным!-- русским. |
|||||||||||||
189
Midaw
28.06.11
✎
17:51
|
(187) переделываю пример...
Если Объект <> НЕОПРЕДЕЛЕНО И Объект.Родитель.Пустая() Тогда Сообщить("Пусто в родителе"); КонецЕсли; в случае если Объект = НЕОПРЕДЕЛЕНО по идеи должна быть ошибка (не выполнимо Объект.Родитель), но 1с не проверяет второе условие, если первое уже ложь. |
|||||||||||||
190
6tuf
28.06.11
✎
17:52
|
с метками или без - главное в коде чтобы его легко было понимать и чтобы эффективный был. остальное - религия
Другое |
|||||||||||||
191
Скептик
28.06.11
✎
17:52
|
а, забыл проголосовать: 2
Использовать можно, но в крайнем случае |
|||||||||||||
192
wt
28.06.11
✎
17:57
|
Всё зависит от школы. Если начинал работать бардачком, то и появляются безусловные переходы. В любой системе можно обойтись без этих переходов.
В чем ценность их отсутствия - это отладка сложных алгоритмов. С goto это просто головная боль. Опыт: ассемблер, си, дельфи, ещё масса специализированных языков, и конечно же наша платформа. Да, GOTO - нельзя использовать |
|||||||||||||
193
Скептик
28.06.11
✎
18:05
|
(192) если поставить самоцелью "секс стоя в гамаке на лыжах с шестом и винтовкой" то вполне можно зачать дитя. Только будет ли ОНО Бубкой? Или Пылевой?
|
|||||||||||||
194
Rabbit
28.06.11
✎
18:05
|
(192) после асма ты категорически против goto? странно...
|
|||||||||||||
195
wt
28.06.11
✎
18:09
|
+(192) вот ещё в чем недостаток приемов программирования с безусловными переходами. Применяя их, поневоле игнорируешь операции, что делают операторы(комилляторы) со стеками то ли процессора, то ли подпрограмм. Т.е. засоряешь ресурсы компа. И иногда это дает о себе знать в процессе отладки. Появляется непонятная информация или непонятные ссылки.
|
|||||||||||||
196
Rabbit
28.06.11
✎
18:11
|
(195) Интересно, а такого что делает компилятор со стеком процессора и что такое стек подпрограмм?
|
|||||||||||||
197
wt
28.06.11
✎
18:13
|
(194) Да, там есть косвенная адресация, но описывая вызовы подпрограмм, приходилось очищать стеки, регистры, области памяти. Вот оттуда и неприятие безусловных переходов.
|
|||||||||||||
199
opty
28.06.11
✎
18:17
|
Причем случай должен быть самый крайний :)
И только в черновом коде , на бело все равно без GOTO перписывать Использовать можно, но в крайнем случае |
|||||||||||||
200
Rabbit
28.06.11
✎
18:17
|
(197) странные проблемы. честно.
|
|||||||||||||
202
Сержант 1С
28.06.11
✎
18:29
|
(0) Чо, ООП уже не торт?
|
|||||||||||||
203
Ахиллес
28.06.11
✎
18:42
|
(188) Повторяю (198) по просьбам трудящихся, с элементами самоцензуры.
Кстати, о чем говорят двойные тире, тире после восклицательного знака и маленькие буквы после восклицательного знака? |
|||||||||||||
204
romix
28.06.11
✎
18:44
|
(138) Вот я и говорю программисты старой школы исключениями не владеют. Вызовы исключения надо применять строго при внештатном исполнении кода (ошибочные ветви) и передавать причину сбоя хотя бы в виде кода или строки. Тогда в обработчике можно проанализировать, а что же произошло, записать ошибку в лог и возобновить исполнение с нужного места. Получается самоконтролирующаяся система.
|
|||||||||||||
205
Fragster
гуру
28.06.11
✎
18:46
|
(204) неправильные входные параметры должны генерировать исключение?
|
|||||||||||||
206
Mort
28.06.11
✎
18:49
|
(205) Угу. А не приводить к зависанию, или ещё хуже, возвращать рандомный результат.
|
|||||||||||||
207
Rabbit
28.06.11
✎
18:51
|
(205)(206) валидность параметров должна проверяться штатно
|
|||||||||||||
208
Fragster
гуру
28.06.11
✎
18:51
|
кстати, кто-нибудь проверял, насколько 1с тормозит на попытках?
|
|||||||||||||
209
Fragster
гуру
28.06.11
✎
18:51
|
(207) что есть "штатно"?
|
|||||||||||||
210
Волшебник
28.06.11
✎
18:52
|
(208) При работе с 1С основной тормоз - это запросы.
|
|||||||||||||
211
NS
28.06.11
✎
18:52
|
(0) Обойтись можно всегда, бывают случае, когда использование goto дает более читабельный код. Например выход из вложенных циклов "вниз"
|
|||||||||||||
212
NS
28.06.11
✎
18:53
|
И конечно-же.
Использовать можно, но в крайнем случае |
|||||||||||||
213
Fragster
гуру
28.06.11
✎
18:53
|
(210) да не, тормоз - отсутствие у программиздов желания учить матчасть
|
|||||||||||||
214
NS
28.06.11
✎
18:53
|
(210) Основной тормоз - это неправильная "прокладка"
|
|||||||||||||
215
romix
28.06.11
✎
18:54
|
(205) Да, если это невозможные (запрещенные по задумке) ветви алгоритма.
|
|||||||||||||
216
Rabbit
28.06.11
✎
19:12
|
(209) проверками
|
|||||||||||||
217
Злопчинский
28.06.11
✎
19:13
|
миллионы строк кода были наваяны на фортране в разных его инкарнациях, где использование гоуту являлось вполне обычным делом. И ничего - все работало, летало, плавало. Не то что сейчас.
. А если взять всякие спецалгоритмы на низкоуровневых языках - там вообще все завязано на сплошные гоуту - по адресам с разными типами адресации... . Использование гоуту само по себе ни плохо, ни хорошо. Все определяется тямой в голове того, кто пишет. Сколько встречал гоуту в сторонних разработках 1С - трудностей в принципе не вызывали - были к месту и вполне понятны, не то что некоторые шедевры типа GOTO М1 //перейти к М1 Использовать можно, но в крайнем случае |
|||||||||||||
218
НП
28.06.11
✎
19:20
|
Использование GOTO определяет стиль мышления программиста.
Уже 40 лет программировать учат без GOTO. Но это - часть правды. А вся правда состоит в том, что там еще есть куча условий, чтобы программа была удобной (для отладки и сопровождения). Например, программные модули должны быть небольшими (максимум, несколько сот операторов). Или: не писать универсальных модулей для обработки различных условий совершенно разнородных объектов. Учитывая, сто конфигурации 1С совершенно не удовлетворяют требованиям структурного программирования - используют они GOTO или не используют - ничего в корне не меняют. Я - не использую. Да, GOTO - нельзя использовать |
|||||||||||||
219
НП
28.06.11
✎
19:22
|
(217) А потом появился структурный Фортран (RATFOR), и я все свои программы на него переписал.
|
|||||||||||||
220
Злопчинский
28.06.11
✎
19:25
|
(219) ну ифигли, мы в основном на ForEx прогили на Бэсм6 - гоуту тоже практически на нет сошло
|
|||||||||||||
221
Steel_Wheel
28.06.11
✎
19:26
|
(216) Исключение -- тоже своего рода проверка. Очень удобно бросить исключение своего типа затем его перехватить и обработать....
В 1С такое не катит, т.к. я могу вызвать исключение, но будет абсолютно непонятно, что его породило, т.е. мне еще это исключение нужно будет парсить, чтобы разобрать что это было |
|||||||||||||
222
Rabbit
28.06.11
✎
19:39
|
(221) вместо одной проверки в исключении выполнится тонна кода. кроме того, поверка валидности параметров локализует ошибку, тогда как исключение из-за их некорректности всплывёт неизвестно где. (я не говорю о генерировании исключения по результату проверок, которое иногда может быть уместным)
|
|||||||||||||
223
Steel_Wheel
28.06.11
✎
19:45
|
(222) Я именно его и имел в виду...
|
|||||||||||||
224
ado
28.06.11
✎
19:46
|
ИМХО, с некоторыми оговорками допустимо использовать только "прервать" и "продолжить", переход по метке необходимо забыть и никогда не вспоминать.
Да, GOTO - нельзя использовать |
|||||||||||||
225
ado
28.06.11
✎
19:47
|
(211) В большинстве языков на этот случай есть оператор "прервать".
|
|||||||||||||
226
ado
28.06.11
✎
19:52
|
(225) Пардон, не прочитал про вложенность.
|
|||||||||||||
227
Rabbit
28.06.11
✎
20:35
|
+(165) даже не именованные циклы, а именованные блоки операторов. Соответственно, будет возможным в пределах модуля и находясь внутри именованного блока прыгать к его началу, или концу, вне зависимости от принадлежности блока к циклам. как-то так.
|
|||||||||||||
228
skunk
28.06.11
✎
20:40
|
ну если по сути то jmp еще никому не удалось заменить ... а вот языках высокго уровня гоняться за джампом моветон ...
так что в контексте всего структурно-объектного программирования ... да гото использовать низя Да, GOTO - нельзя использовать |
|||||||||||||
229
NS
28.06.11
✎
21:32
|
(133) Глупость. Кто мешает тебе использовать переход только вниз, либо писать в комментарии куда идешь.
|
|||||||||||||
230
NS
28.06.11
✎
21:34
|
(228) Когда научишься обрабатывать ошибки в С без goto - напиши в Майкрософт, и расскажи какие они лохи, раз используют goto...
|
|||||||||||||
231
Fragster
гуру
28.06.11
✎
21:47
|
(217) правильно так:
GOTO М1 //перейти к М1, ваш К.О. |
|||||||||||||
232
Fragster
гуру
28.06.11
✎
21:49
|
(226) в большинстве языков можно указывать, на сколько уровней вложенности цикла прервать и продолжить
|
|||||||||||||
233
Alsh
28.06.11
✎
21:49
|
10 лет назад использовал, когда совсем не понимал, что делаю.
Последние 10 лет даже не вспоминал. ИМХО использование GOTO - свидетельство некомпетентности, вернее, тупости. Да, GOTO - нельзя использовать |
|||||||||||||
234
Fragster
гуру
28.06.11
✎
21:50
|
(227) функции и процедуры, не?
|
|||||||||||||
235
NS
28.06.11
✎
21:54
|
(233) Слишком громкие слова, исхотя из твоих слов - некомпитентен либо ты, либо нижеописанные:
"Обработка ошибок Этот случай применим к языкам, не содержащим конструкции try ... finally — например, к C без применения SEH, существующего только в Windows. В этом случае goto используется для перехода на код «очистки» — находящийся в конце функции и уничтожающий созданные ею объекты перед выходом из неё. Этот метод широко используется при написании драйверов. Здесь без goto было бы совсем неудобно, поскольку ошибка может возникнуть в любом месте иерархии. Разработчики ядра операционных систем и драйверов обычно ограничены только чистым Си, и такой способ использования goto в настоящее время встречается в большинстве операционных систем общего назначения. Главным критерием применимости goto во всех случаях, включая указанные, является ненарушение используемой парадигмы программирования. В приведенных примерах это — структурное программирование, то есть должны сохраняться иерархическая организация программы и таковая же логика её работы." (с) Wiki |
|||||||||||||
236
Mort
28.06.11
✎
22:18
|
(235) Ну ты загнул. Ещё бы про ассемблерные вставки рассказал.
|
|||||||||||||
237
NS
28.06.11
✎
22:24
|
(236) При чем тут ассемблерные вставки? Читабельный переход вниз из вложенных циклов делается только при помощи метки. Это для примера. Даже в языках где есть способ выхода из вложенных циклов - используется метка (метка начала вложенных циклов)
|
|||||||||||||
238
Rabbit
28.06.11
✎
22:42
|
(234) Не, ибо не решают проблему "глубокого выхода". В окончательном варианте: выход в начало блока для циклов и в конец для любых - так будет концептуально чисто.
|
|||||||||||||
239
Сияющий Асинхраль
28.06.11
✎
22:48
|
Мое знакомство с программированием началось с разбора чужой программы на алголе по расчету атомных орбиталей, в ней было достаточно много меток, но сам код был так красив, что я кайфовал читая его, с тех пор прошло много лет, но до сих пор мне хватит пальцев одной руки, чтобы вспомнить случаи подобного кайфа от чтения кода. С тех пор сделал для себя вывод: красивый код не зависит от наличия или отсутствия меток, просто все должно быть к месту.
Другое |
|||||||||||||
240
Snovy
28.06.11
✎
22:50
|
Уже несколько раз в ветке прозвучало - возврат, прервать, попытка...исключение это самые настоящие гото. Поэтому те, кто пишут нельзя использовать, должны из принципа отказаться от использования этих операторов...
Использовать можно, но в крайнем случае |
|||||||||||||
241
Snovy
28.06.11
✎
22:51
|
(240)+ В 1С ни разу не использовал, но тем не менее...
|
|||||||||||||
242
reanimator
28.06.11
✎
23:02
|
гадость
Да, GOTO - нельзя использовать |
|||||||||||||
243
Zamestas
28.06.11
✎
23:03
|
Всегда можно обойтись без goto, но некоторым проще воткнуть его, чем отписать "красивый" код.
Да, GOTO - нельзя использовать |
|||||||||||||
244
vis_tmp
28.06.11
✎
23:05
|
Противники использования вдолбили себе в голову постулаты и не задумываются...
Использовать можно, но в крайнем случае |
|||||||||||||
245
Snovy
28.06.11
✎
23:07
|
(243) Критерии "красивовго кода" в студию. Иначе голословно...
|
|||||||||||||
246
opty
28.06.11
✎
23:07
|
Как отладочный прием вполне себе нормально
|
|||||||||||||
247
Rabbit
28.06.11
✎
23:07
|
(243) можно и без условий обойтись...
|
|||||||||||||
248
noprogrammer
28.06.11
✎
23:15
|
1.Да - обойтись можно (и нужно)
2.Да - использование goto плохой(ужасный) стиль программирования Да, GOTO - нельзя использовать |
|||||||||||||
249
Rabbit
28.06.11
✎
23:20
|
всем, выбравшим п.1, запретить кодить
|
|||||||||||||
250
noprogrammer
28.06.11
✎
23:23
|
(249) так они и не кодят, они разрабатывают - в этом и есть большая разница между п.1 и п2,3
|
|||||||||||||
251
Snovy
28.06.11
✎
23:24
|
(249) Я просто перестану считать их мнение на этом форуме проффесиональным... Несмотря на мое к этим участникам форума уважение....
|
|||||||||||||
252
Snovy
28.06.11
✎
23:26
|
(251)+ :) ... профессиональным....
|
|||||||||||||
253
Rabbit
28.06.11
✎
23:26
|
(250) ...а за употребление при этом слова "разрабатывать" расстреливать
|
|||||||||||||
254
NS
28.06.11
✎
23:38
|
(243) пример давно приведен, именно красивого кода -
Для цикл Для цикл Если Тогда перейти ~метка; // комментарий КонецЕсли; КонецЦикла; КонецЦикла; Сформировать(); ~метка: |
|||||||||||||
255
Волшебник
28.06.11
✎
23:51
|
(251) Просто им на твоё мнение об их профессиональности наплевать...
|
|||||||||||||
256
Snovy
28.06.11
✎
23:52
|
(255) Примеры красивого кода в УПП 1.3:
Глобальный поиск по "Перейти ~" - 1174 вхождения... |
|||||||||||||
257
Snovy
28.06.11
✎
23:54
|
(255) Мне не наплевать - если у меня есть вопрос, и я хочу НАЙТИ грамотный ответ, то....
|
|||||||||||||
258
NS
28.06.11
✎
23:56
|
(257) Ответ приведен в википедиях - и русскоязычной, и англоязычной. Если не устраивает википедия - пожалуйста, Crafty - эталонный код, используется для оценки производительности компиляторов. Goto есть в наличии. Именно для выхода из вложенных циклов вниз.
|
|||||||||||||
259
Волшебник
28.06.11
✎
23:56
|
(256) А нам-то чо? Мы УПП не писали... Тем, кто писал, вход на мисту заказан...
|
|||||||||||||
260
Snovy
28.06.11
✎
23:56
|
(256) - к (243), к (250)
|
|||||||||||||
261
Snovy
28.06.11
✎
23:58
|
(259) Лукавите, уважаемый... :) А Nasf ???? Шучу...
Я же про п.1 и п.2 голосовалки, про красивости кода.... |
|||||||||||||
262
Волшебник
29.06.11
✎
00:00
|
(261) А мы с Насиповым Фаритом по оператору GOTO не пересекаемся. Внезапно, да?
|
|||||||||||||
263
Snovy
29.06.11
✎
00:04
|
(262) А иного и не ожидал... Я не про готу, а про вход на мисту...
По теме - не люблю категоричных суждений, особенно там - где им не место. Судя по ветке - кроме штампа, что гото - это ересь, ни одного убедительного довода, одни догмы... |
|||||||||||||
264
Волшебник
29.06.11
✎
00:07
|
(263) Ты скажи прямо. Ты за GOTO или ты категорически против goto. Если ты ещё не определился, ты мой клиент. Из адекватных, то бишь. Тут тестируется логика, подверженность авторитетам, независимость суждений, способность к аргументации.
|
|||||||||||||
265
Волшебник
29.06.11
✎
00:10
|
p.s. Разумеется, конструкция GOTO недопустима в современных учётных системах. Если программист допускает (создаёт) такую конструкцию, он должен её обосновать, даже в виде служебной записки. А если оправданий нет, то ему стыд и позор, ибо Дейкстра, и пусть исправляет. GOTO - ересь, но ересь научная, оправданная, свидетельствующая об офигененном уровне профессионализма.
|
|||||||||||||
266
noprogrammer
29.06.11
✎
00:10
|
(263) Доводы очень простые - использование goto приводит к не читабельности кода и запутывания его "вусмерть", в правильно составленном алгоритме goto не может понадобится в принципе.
(имхо) |
|||||||||||||
267
Волшебник
29.06.11
✎
00:12
|
(266) Единственное GOTO на модуль не может привести к столь печальным последствиям, как нечитабельность кода. А может дело в способности читаемости программистов?
|
|||||||||||||
268
noprogrammer
29.06.11
✎
00:16
|
(267) все относительно в этом мире, если привык читать текст без ошибок - читать исковерканный текст становится сложно, буквы вроде все те же а все равно как-то не так.
|
|||||||||||||
269
Rabbit
29.06.11
✎
00:17
|
(266) разверни (254), избавившись от goto, и реши что читабельнее
|
|||||||||||||
270
Snovy
29.06.11
✎
00:17
|
(265)(266) В свое оправдание я уже привел результат в виде 1174 случая использвания переходов по меткам в УПП. Ответ я дал где-то выше - п.2 (ближе п.4 - но он слишком общий и невнятный). Любой код (красивый он или не красивый, есть в нем гото или нет) должен прежде всего отвечать задачам, которые этот код решает. А код ради кода - это тоже самое, что учет ради учета...
Мое мнение - самоый главный пункт в законе о бух. учете - это пункт о рациональности в ведении бух. учета. Многие (в том числе и методологи от 1С) об этом забывают... |
|||||||||||||
271
Snovy
29.06.11
✎
00:19
|
(270)+Я к тому, что рациональность - она не только в бух.учете...
|
|||||||||||||
272
noprogrammer
29.06.11
✎
00:19
|
(269) >>в правильно составленном алгоритме goto не может понадобится в принципе.
|
|||||||||||||
273
NS
29.06.11
✎
00:20
|
(267) Пример не единственного goto из crafty
fp = ptbd->m_rgfpFiles[side][iExtent]; if (NULL == fp) { fp = fopen (pszFileName, "rb"); if (NULL == fp) { #if defined (STOP_ON_ERROR) printf ("*** Unable to open file %s\n", pszFileName); fflush (stdout); exit(1); #endif goto ERROR_LABEL; } } } ptbd->m_rgfpFiles[side][iExtent] = fp; } else goto ERROR_LABEL; } // File opened. Now seek and read necessary chunk if (NULL == ptbd->m_rgpdiDecodeInfo[side][iExtent]) { long lPos; int iResult; lPos = (long) (iPhysicalChunk*TB_CB_CACHE_CHUNK); #if defined (T33_INCLUDE) || defined (T42_INCLUDE) if (lPos < 0) { iResult = fseek (fp, 0L, SEEK_SET); if (iResult) { #if defined (STOP_ON_ERROR) printf ("*** Unable to seek file %s offset %08X\n", pszFileName, 0); fflush (stdout); exit(1); #endif goto ERROR_LABEL; } do { iResult = fseek (fp, 0x40000000, SEEK_CUR); if (iResult) { #if defined (STOP_ON_ERROR) printf ("*** Unable to seek file %s offset %08X\n", pszFileName, 0x40000000); fflush (stdout); exit(1); #endif goto ERROR_LABEL; } lPos -= 0x40000000; } while (lPos < 0); iResult = fseek (fp, lPos, SEEK_CUR); } else #endif iResult = fseek (fp, lPos, SEEK_SET); // Read uncompressed file if (iResult) { #if defined (STOP_ON_ERROR) printf ("*** Unable to seek file %s offset %08X\n", pszFileName, lPos); fflush (stdout); exit(1); #endif goto ERROR_LABEL; } |
|||||||||||||
274
Волшебник
29.06.11
✎
00:20
|
(270) Присылай своё резюме. Нам нужны мыслящие люди.
|
|||||||||||||
275
NS
29.06.11
✎
00:22
|
(272) Точно! В правильном алгоритме мелкой правки дизайна печатной формы - goto не может потребоваться в принципе.
|
|||||||||||||
276
Snovy
29.06.11
✎
00:25
|
(274) Ко мне за советами приходят разработчики Итилиума и ремонт-Эксперта. Как же я их брошу? :) Не, меня и тут неплохо кормят. Но в аську отвечу, есть что спросить...
|
|||||||||||||
277
Волшебник
29.06.11
✎
00:25
|
Чуваки, сохраняющие своё право на GOTO, нам интересны. Ждём Ваши резюме.
|
|||||||||||||
278
Rabbit
29.06.11
✎
00:26
|
(272) goto - это уровень _реализации_ алгоритма. поэтому я говорил именно о кодинге
|
|||||||||||||
279
noprogrammer
29.06.11
✎
00:27
|
(275) оценил :) жалко только, что приходится править не только дизайн печатной формы.
|
|||||||||||||
280
noprogrammer
29.06.11
✎
00:30
|
(278) в данном конкретном случае - кода будет на 2 строчки больше - зато на порядок понятнее, а если не дай бог goto уйдет на другую страницу текста кода - иди пытайся читать этот код...
|
|||||||||||||
281
Rabbit
29.06.11
✎
00:32
|
(280) в данном случае мы получим лишь лёгенькую обфускацию...
|
|||||||||||||
282
Волшебник
29.06.11
✎
00:32
|
(280) В чём измеряется "понятность кода"?
|
|||||||||||||
283
noprogrammer
29.06.11
✎
00:32
|
+280 а дойдешь до этой метка - там обязательно будет очередной прыжок к другой метке - вот и прыгай так по коду как горный козел - принципе наверно увлекательно но видимо просто не для меня.
|
|||||||||||||
284
noprogrammer
29.06.11
✎
00:33
|
(282) судя по всему в том же в чем измеряется "красота кода".
|
|||||||||||||
285
Волшебник
29.06.11
✎
00:34
|
(284) Категорически не согласен. Красота и понятность - вещи совершенно разные
|
|||||||||||||
286
Rabbit
29.06.11
✎
00:35
|
+(281)(280) разбираясь, прыгаю по чужим модулям и не испытываю проблем
(283) в рассматриваемом случае прыжка не будет, так ведь? а если без гоуту? |
|||||||||||||
287
noprogrammer
29.06.11
✎
00:37
|
(285) отчего-же ? в 99% случаях - красивый код - не может быть не понятный.
|
|||||||||||||
288
Волшебник
29.06.11
✎
00:38
|
(287) Думаю, в процентах 0,1%. Красивый код должен быть поначалу непонятен. Это принцип красоты, эстетики. Это же не быдлокод, который ожидаем
|
|||||||||||||
289
Rabbit
29.06.11
✎
00:38
|
(287) красивый код как правило более мощный, потому напрягает сильнее
|
|||||||||||||
290
noprogrammer
29.06.11
✎
00:39
|
(286) >>в рассматриваемом случае прыжка не будет, так ведь?
не факт, приведенный код абстрактный (с пустым циклом - поэтому прыжка как бы нету) а в реальности внутри цикла может быть не одна страница текста. >>разбираясь, прыгаю по чужим модулям и не испытываю проблем прыгать по модулям и по меткам - сравнения мягко говоря не корректное. |
|||||||||||||
291
opty
29.06.11
✎
00:39
|
(285) Угу , но в практическом применении к 1С , лучше понятно чем красиво
(287) Далеко не всегда , красивый код может использовать разные хаки , и не стандартные приемы |
|||||||||||||
292
noprogrammer
29.06.11
✎
00:42
|
(291) соглашусь
|
|||||||||||||
293
Rabbit
29.06.11
✎
00:43
|
(мощность кода - количество смысла на единицу текста)
(290) > а в реальности внутри цикла может быть не одна страница текста. это ничего не меняет > прыгать по модулям и по меткам - сравнения мягко говоря не корректное. это же относится и к страницам текста |
|||||||||||||
294
Волшебник
29.06.11
✎
00:43
|
(291) Сложно не согласиться. Лучше понятнее и красивее, чем путано и уродско. Красивый код является более защищённым по сравнению с говнокодом.
|
|||||||||||||
295
opty
29.06.11
✎
00:46
|
(294) Ну если и понятно и красиво и эффективно одновременно - это идеал к которому надо стремится , но достаточно труднодостижимо , как правило приходится чем то жертвовать
|
|||||||||||||
296
Волшебник
29.06.11
✎
00:49
|
(295) Дёшево, качественно, быстро - вот идеал.
Оператор GOTO - это какая-то мизерная часть к слову "качественно", совершенно незначительная. Ветка смысла не имеет |
|||||||||||||
297
opty
29.06.11
✎
00:53
|
(296) Быстро, качественно, дешево - выбери любые два :)
Отказ от GOTO в первую очередь , это выбор стиля , парадигмы , и соблюдение дисциплины программирования |
|||||||||||||
298
Zamestas
29.06.11
✎
00:54
|
(254) Для цикл
Для цикл Если Тогда Возврат КодОшибки; КонецЕсли; КонецЦикла; КонецЦикла; Сформировать(); Не катит? |
|||||||||||||
299
Волшебник
29.06.11
✎
00:55
|
(297) Отказ от GOTO - это собственноручная роспись в непонимании слова "качественно".
|
|||||||||||||
300
noprogrammer
29.06.11
✎
00:55
|
(297) вот так бы соглашался и соглашался.
|
|||||||||||||
301
NS
29.06.11
✎
00:56
|
(298) Но там же нет выхода из модуля.
А если ты хочешь оформить этот код в виде функции - получаешь кучу гемора. Например с недоступными локальными переменными. |
|||||||||||||
302
NS
29.06.11
✎
00:57
|
(297) Если дисциплинироваться, то по-полной. Зачем же одним goto ограничиваться?
|
|||||||||||||
303
Zamestas
29.06.11
✎
00:58
|
(302) Возврат СписокПараметровОшибки;
Не катит? |
|||||||||||||
304
Волшебник
29.06.11
✎
01:00
|
(303) Дисциплина программирования не может ограничиваться возвратом списка параметров ошибок.
|
|||||||||||||
305
Zamestas
29.06.11
✎
01:01
|
(304) Ок пусть структура (в V77 больше плясок) - в винде вроде так...
|
|||||||||||||
306
opty
29.06.11
✎
01:03
|
Качественно (для кода) - слишком всеобъемлющая категория
ИМХО - для 1С качественный код должен в первую очередь структурирован и понятен Для драйверов (или шахматных движков) совсем другое дело |
|||||||||||||
307
NS
29.06.11
✎
01:05
|
Я что-то не понимаю всех этих извратов. В (254) Совершенно понятный и читаемый код. Заставить от него отказаться, либо кричать что написавший такое непрофессионал - могут заставить только очень серьезные тараканы в голове.
|
|||||||||||||
308
NS
29.06.11
✎
01:05
|
(306) И что тебе в (254) непонятно?
|
|||||||||||||
309
opty
29.06.11
✎
01:08
|
(308) Мне все понятно , и кстати я проголосовал за п.2 , и я использую GOTO , в первую очередь в отладке , бывает и в рабочем коде , но в рабочем коде стараюсь обойтись без него .
|
|||||||||||||
310
Zamestas
29.06.11
✎
01:11
|
(307) Код в 254 именно простой - тут и применение goto самый простой способ, если алгоритм будет сложный и циклов больше, то без проблем вывалиться из всех циклов, а потом найти и понять, что и где не так будет просто.
|
|||||||||||||
311
Rabbit
29.06.11
✎
01:14
|
(210) пройтись по цепочке проверок/выходов конечно же проще?
|
|||||||||||||
312
Zamestas
29.06.11
✎
01:18
|
(311) При чем тут проверки/выходы? Если алгоритм предполагает безусловное завершение (goto безусловный переход) - значит случилось что то фатальное - т.е. продолжение выполнения не имеет смысла. Возвращается только информация о том, чем это вызвано.
|
|||||||||||||
313
Rabbit
29.06.11
✎
01:20
|
(312) Там может быть выход из двух циклов, вложенных в третий.
|
|||||||||||||
314
Волшебник
29.06.11
✎
01:23
|
(305) Дисциплина программирования не может быть ограничена конкретной программной конструкцией типа GOTO или структурой.
|
|||||||||||||
315
NS
29.06.11
✎
01:25
|
(310) Сделать непонятно мжно и без goto. А если использовать goto в меру, только там где это действительно необходимо (а необходимо это бывает весьма редко), то это никапли не вредит коду, более того - делает его понятным.
|
|||||||||||||
316
Zamestas
29.06.11
✎
01:30
|
(313) Опять же - для вызывающей процедуры - фатальные ошибки в вызываемой процедуре не всегда фатальные. Т.е. крах вызываемой функции не всегда приводит к не возможности продолжить выполнение алгоритма - goto выкидывает сразу из кода, а возврат с описанием ошибки позволяет обойти локальный сбой, или наоборот "намотать" ошибки в какую нить структуру.
(310) Согласен на 100% - но нужно без него. |
|||||||||||||
317
opty
29.06.11
✎
01:30
|
(315) Я бы не много не так сформулировал
Умеренное и грамотное использование GOTO там где это необходимо не делает код более непонятным , т.е. не ухудшает его читабельность Но что бы умеренно и грамотно применять GOTO и именно там где надо прог должен иметь определенный уровень понимания |
|||||||||||||
318
Zamestas
29.06.11
✎
01:34
|
(+316) Точнее в вызываемых/вызывающих функциях а не процедурах.
|
|||||||||||||
319
Rabbit
29.06.11
✎
01:35
|
(316) речь идёт не о завершении по ошибке, а скорей о сколь либо сложном расчёте
|
|||||||||||||
320
Zamestas
29.06.11
✎
01:47
|
(319) Дык разговор идет о быстром выходе из вложенных циклов - в остальном goto вообще не нужен - или я не прав?
|
|||||||||||||
321
skunk
29.06.11
✎
03:57
|
(230)обязательно ... особенно иосле прочтения венгерской нотации ...
http://msdn.microsoft.com/ru-ru/library/yb3kz605.aspx Note Structured exception handling works with C and C++ source files. However, it is not specifically designed for C++. You can ensure that your code is more portable by using C++ exception handling. Also, the C++ exception handling mechanism is much more flexible, in that it can handle exceptions of any type. |
|||||||||||||
322
Bww_
29.06.11
✎
05:10
|
На ум приходит масса аналогий:
- использование задней передачи автомобиля для движения вперед не обосновано (, тем не менее в Москве это модно). Но глупо вообще не использовать заднюю передачу; - в обычном полете не принято попусту "теребить" кнопку катапульты. Но ... и.т.п. |
|||||||||||||
323
miki
29.06.11
✎
05:30
|
(322)предлагаю аналогию "пожарный выход".
|
|||||||||||||
324
miki
29.06.11
✎
05:33
|
+хожу через парадный
Использовать можно, но в крайнем случае |
|||||||||||||
325
miki
29.06.11
✎
05:56
|
вот вариант (254) для 1С без ~метки:
Попытка Для цикл Для цикл Если Тогда ВызватьИсключение;//а=а/0; КонецЕсли; КонецЦикла; КонецЦикла; Сформировать(); Исключение КонецПопытки; хотя, по сути, тоже GoTo, но формально нет :) |
|||||||||||||
326
kosts
29.06.11
✎
06:21
|
(325) Использовать исключение для обычных действий не фонтан.
- Трудности отладки (все время будет на этом месте спотыкаться). - Не ясность поведения программы в этом месте. - Не будет отловлена настоящая ошибка, например в процедуре Сформировать() По этому я все равно за GOTO, в крайних случаях. Использовать можно, но в крайнем случае |
|||||||||||||
327
Escander
29.06.11
✎
06:26
|
(0)Писать без гоутов вполне реально, в оракле если не изменяет память, его нет до сих пор - пишут-же!
С другой стороны иногда без него обойтись сложно, т.е. можно но необоснованно усложняется код! Да и вообще что все так к гоуту прицепились? Начните для начала комментировать код - как предполагает хороший стиль программиирования (хотя-бы что какая функция делает и т.д.) |
|||||||||||||
328
Escander
29.06.11
✎
06:27
|
типа так
Использовать можно, но в крайнем случае |
|||||||||||||
329
Прохожий
29.06.11
✎
07:06
|
Иногда кривизна задачи может вполне быть компенсирована кривизной решения.
Использовать можно, но в крайнем случае |
|||||||||||||
330
Fragster
гуру
29.06.11
✎
08:45
|
(277) сколько?
|
|||||||||||||
331
miki
29.06.11
✎
08:48
|
(330)обычно 1шт резюме достаточно
|
|||||||||||||
332
_Atilla
29.06.11
✎
08:56
|
Когда надо сделать выбор между рекурсией и GOTO, я выбираю GOTO.
Использовать можно, но в крайнем случае |
|||||||||||||
333
Ненавижу 1С
гуру
29.06.11
✎
09:00
|
партия любителей goto уже имеет место быть?
|
|||||||||||||
334
Mort
29.06.11
✎
09:15
|
(288) У вас все пишут загадками? А понятие как читабельность кода ни о чем не говорит?
|
|||||||||||||
335
bodri
29.06.11
✎
09:18
|
как-то так ...
хотя последний раз использовал в 7,7, лет так 8-9 назад Использовать можно, но в крайнем случае |
|||||||||||||
336
_Atilla
29.06.11
✎
09:19
|
(333) Конечно.
Давайте рассмотрим вот этот случай: надо перебирать m^n 1 вариант Для цикл Для цикл КонецЦикла; КонецЦикла; 2 вариант рекурсия 3 вариант GOTO |
|||||||||||||
337
Mort
29.06.11
✎
09:22
|
(336) Такой вариант не рассматривается?
4. Функция НайтиЧоТамНужно(Матрица_N_M) Для Цикл Для Цикл Если Тогда Возврат ... КонецЕсли КонецЦикла КонецЦикла Возврат Неопределено; КонецФункции |
|||||||||||||
338
_Atilla
29.06.11
✎
09:24
|
(337) 4 чем отличается от 1?
|
|||||||||||||
339
Mort
29.06.11
✎
09:26
|
(338) А, ну если это имелось ввиду. Я то думал под номером 1 вариант "красивого кода" из (254)
|
|||||||||||||
340
_Atilla
29.06.11
✎
09:32
|
(339) Если n переменная 1 вариант не прокатит.
|
|||||||||||||
341
Rabbit
29.06.11
✎
11:53
|
(325) расстрельный код
|
|||||||||||||
342
NS
29.06.11
✎
12:02
|
(325) Это понятный, читабельный и красивый код?!
|
|||||||||||||
343
Ахиллес
29.06.11
✎
12:22
|
(301) А в чем проблема передать переменные в функцию? Мы вроде договаривались, что у нас будет два простых вложенных цикла, а теперь оказалось, что там ещё куча переменных меняется, которые даже в функцию не влезают.
|
|||||||||||||
344
Rabbit
29.06.11
✎
12:26
|
(343) а ради двух простых вложенных циклов созидать функцию - это кравиво, да...
|
|||||||||||||
345
Rabbit
29.06.11
✎
12:26
|
(344) *красиво
|
|||||||||||||
346
NS
29.06.11
✎
12:26
|
Во люди, вместо того чтоб признать что goto имеет право на существование, они будут часами придумывать кривой способ уйти от его использования.
|
|||||||||||||
347
Ахиллес
29.06.11
✎
12:30
|
Кстати, кто может объяснить, почему данный код валится с ошибкой?
Пока Истина Цикл выполнить("Прервать"); Конеццикла; {(1,9)}: Оператор Прервать (Break) может употребляться только внутри цикла Прервать<<?>> Платформа 8.1.15.14 |
|||||||||||||
348
Mort
29.06.11
✎
12:32
|
(344) Функция создается не только для того, чтобы спрятать GOTO. Функция прячет копание в коллекции.
|
|||||||||||||
349
Rabbit
29.06.11
✎
12:32
|
(347) вероятно у "выполнить" свой контекст
|
|||||||||||||
350
Rabbit
29.06.11
✎
12:33
|
(348) где упоминались коллекции?
|
|||||||||||||
351
Джинн
29.06.11
✎
12:36
|
Никогда лично не использовал. Местами видел.
Использовать можно, но в крайнем случае |
|||||||||||||
352
Ахиллес
29.06.11
✎
12:39
|
(349) Ну в принципе, я так и подумал. Ну фигово это. Можно сказать баг платформы тогда. Иначе можно было бы нарисовать, что то типа этого:
Функция ВложенныйЦикл(Флаг) сч = 0; Пока сч < 10 цикл сч = сч + 1; Если Флаг = 1 тогда возврат "Прервать"; ИначеЕсли Флаг = -1 тогда возврат "Продолжить" Иначе // крутим до конца КонецЕсли; конеццикла; возврат ""; Конецфункции Процедура НажалиКнопку() сч = 0; Пока сч < 10 цикл сч = сч + 1; выполнить(ВложенныйЦикл(1)); конеццикла; КонецПроцедуры |
|||||||||||||
353
Хранимая Процедура
29.06.11
✎
12:40
|
(0) - неправильно.
Достаточно всего лишь 2-х конструкций: цикл "пока" и следование Другое |
|||||||||||||
354
Rabbit
29.06.11
✎
12:49
|
(352) Это не баг, а фича - защита от любителей самострела коленки.
По поводу решения с функциями. Появляются лишние сущности в виде условий, флагов и самой функции. Кроме того, функция будет определена далеко от тела цикла. |
|||||||||||||
355
Ахиллес
29.06.11
✎
12:52
|
(354) Почему фича? Платформа теряет контекст, то есть не возвращает его туда откуда взяла. Взяла изнутри цикла, вот и верни внутрь цикла. А такая нежная забота со стороны платформы обо мне нафига нужна?
|
|||||||||||||
356
Сияющий Асинхраль
29.06.11
✎
12:52
|
А вообще мне трудно понять людей, которых, например, не напрягает прыгать по десятку вложенных модулей в любой типовой восьмерочной конфе, а вот наличие метки в том же модуле мгновенно делает для них код нечитаемым...
|
|||||||||||||
357
Rabbit
29.06.11
✎
12:56
|
(355) Аргумент "выполнить" является инородным по отношению к контексту исполнения. Или нет?
|
|||||||||||||
358
Rabbit
29.06.11
✎
12:59
|
+(357) Предполагается подход как раз в духе того что ты делаешь: вызови функцию, разбери результат и на его основании меняй ход выполнения.
|
|||||||||||||
359
Ахиллес
29.06.11
✎
13:01
|
(356) Ну я например просто не умею ими пользоваться :-)
Как переходить по меткам? В процедуры и функции по F12; циклы по Ctrj [ и ], а по меткам как? (357) почему? В данном месте я хочу выполнить произвольный код. Что мешает? Вот такой код чудненько отрабатывает: Процедура НажалиКнопочку() сч = 0; Пока сч < 3 цикл //сч = сч + 1; выполнить("сч = сч + 1"); конеццикла; КонецПроцедуры |
|||||||||||||
360
КЫСЯ
29.06.11
✎
13:01
|
А я за ГоТов...
Куда хочу, туда верчу и нефих мне указывать своей мужской логикой, куда мне двигаться! |
|||||||||||||
361
Zixxx
29.06.11
✎
13:06
|
GOTO - задница, если бы так и дальше шло, то появился бы GOBACK, GOJUMP и т.д.
Да, GOTO - нельзя использовать |
|||||||||||||
362
Rabbit
29.06.11
✎
13:21
|
(359) > В данном месте я хочу выполнить произвольный код
Выполни его непосредственно. (361) Появились языки без гоуту, но с массой новых возможностей, позволяющих красиво обходить вышеобозначенные ямы. Если такое языки не используются, тогда goto бывает очень к стати. |
|||||||||||||
363
Ахиллес
29.06.11
✎
13:28
|
(362) Это понятно. Просто конструкцию из "Если" можно было бы заменить одной строкой. Было бы красиво. Собственно не вижу причин, почему платформа рогом упирается.
Пока Истина Цикл Прервать; Конеццикла; она кушает, а Пока Истина Цикл Выполнить("Прервать"); Конеццикла; ей видите ли не нравится. Где логика? |
|||||||||||||
364
ado
29.06.11
✎
13:31
|
(353) Можно и по другому сказать. Достаточно двух конструкций -- ветвление и goto ;-)
|
|||||||||||||
365
Rabbit
29.06.11
✎
13:42
|
(363) логика очевидна...
|
|||||||||||||
366
sikuda
29.06.11
✎
13:45
|
Пистолет с последним патроном тоже должен быть на всякий случай.
Использовать можно, но в крайнем случае |
|||||||||||||
367
Pro-tone
29.06.11
✎
13:52
|
А как сделать обход по массиву/тз/сз/структуре/и тп если кол-во элементов у него меняется ? Ну допустим в цикле стоит чот-то типа УдалитьСтроку() ? Без GOTO никак не знаю способов больше. Метка в начало цикла сбрасывает счетчик кол-ва элементов/итерраций.
|
|||||||||||||
368
Goggy
29.06.11
✎
13:56
|
Клас, красота кода в УСО 1,3 :)
Глобальный поиск по "Перейти ~" найдено 1175 вхождений :) Использовать можно, но в крайнем случае |
|||||||||||||
369
Fragster
гуру
29.06.11
✎
14:08
|
(367) читай всю ветку
|
|||||||||||||
370
ado
29.06.11
✎
14:10
|
(367) Тихая жесть ...
|
|||||||||||||
371
Alexey87
29.06.11
✎
14:11
|
Пригодились, когда только писал на ассемблере...А так, ни разу не было в них нужды.
Да, GOTO - нельзя использовать |
|||||||||||||
372
sergeante
29.06.11
✎
14:20
|
"Если есть GOTO, значит это кому-нибудь надо?" (с)
Порой изящнее поставить GOTO, чем городить конструкции IF/ELSE и пр. Использовать можно, но в крайнем случае |
|||||||||||||
373
ado
29.06.11
✎
14:21
|
(158) Не хочешь ли ты сказать, что эта теорема неверна?
|
|||||||||||||
374
GoldenDawn
29.06.11
✎
14:30
|
если быстро накидать одноразовую обработину по корректировке какой-нибудь ботвы, то применяю, иначе считаю что такой ход выносит мозг
Использовать можно, но в крайнем случае |
|||||||||||||
375
sergeante
29.06.11
✎
14:36
|
(367) ППЦ...
|
|||||||||||||
376
GoldenDawn
29.06.11
✎
14:38
|
(367)обернуть этот цикл в другой цикл "пока"
|
|||||||||||||
377
dragonIMV
29.06.11
✎
14:46
|
(0) GOTO использовался последний раз в турбопаскале, когда изучали в школе тему как раз связанную с метками...сколько лет прошло с тех пор, но метками не пользуюсь...лучше уж условий сделать побольше или еще что нужное, чтобы обойтись без меток....
Да, GOTO - нельзя использовать |
|||||||||||||
378
fisher
29.06.11
✎
15:13
|
Гоуту - это граната в руках обезьян, взрывающая мозг.
Даже в тех редчайших случаях, когда без гоуту получается более громоздкий код, он всё равно читается легче. Потому что такой код имеет единообразно читаемую структуру. Гоуту имеет сомнительное право на жизнь, как временная заплатка при отсутствии времени на рефакторинг, например. Там где оно в типовых встречается - вреда от него особого нет, но необходимости тоже. Зато в жизни ТАКОЕ встречаешь, что без полного рефакторинга дорабатывать просто нереально. Поэтому считаю что лучше бы его вообще не было. Вреда намного больше, чем пользы. Лучше бы на форумах были вопросы "Как реализовать", чем допускать безконтрольное размножение гоуту в дикой природе. Да, GOTO - нельзя использовать |
|||||||||||||
379
ado
29.06.11
✎
15:21
|
Хе-хе. Продолжим вбрасывать.
Я бы конструкцию:
преписал бы так:
Не читабельно? Зато методологично! Кто красивше? |
|||||||||||||
380
Ахиллес
29.06.11
✎
15:26
|
(379) во первых нечитабельно. Вообще хрень какая то. Во вторых Условиями вложенные циклы не ограничиваются. Например может быть перебор строк ТЗ которыми заполнена другая ТЗ. Тогда твой код вообще работать не будет потому что код перевёрнут по отношению к вложенным циклам.
|
|||||||||||||
381
miki
29.06.11
✎
15:27
|
(342)А чем он отличается от (254) кроме синтаксиса?
Оппа будет когда надо сделать выход из нескольких мест в одно, это да. |
|||||||||||||
382
fisher
29.06.11
✎
15:29
|
(379)
Пока Условие1 И НЕ БезусловноеЗавершение Тогда Последовательность1(); Пока Условие2 И НЕ БезусловноеЗавершение Тогда Последовательность2(); Если Условие3 Тогда БезусловноеЗавершение = Истина; КонецЕсли; КонецЕсли; КонецЦикла Фишка в том, что уже читая условие первого цикла, ты понимаешь, что алгоритм предусматривает безусловное завершение и можешь проанализировать соответствующие точки. Всё понятно, предсказуемо и без неприятных неожиданностей. |
|||||||||||||
383
miki
29.06.11
✎
15:29
|
+ насчет "понятный, читабельный и красивый" это к эстетам. Никогда не претендовал, хотя стараюсь
|
|||||||||||||
384
GAVe
29.06.11
✎
15:32
|
Коллеги! Кажется кто-то из вас забыл, что операторы Возврат и Прервать являются выделенными (частными) случаями оператора GoTo. Остальные случаи должны быть с должным подходом реализованы с помощью оператора Перейти.
Если отказываться от этого оператора то пишите такой код (382)! А то статистику портите. Лучше использовать, чем чаще, тем лучше |
|||||||||||||
385
Ахиллес
29.06.11
✎
15:32
|
(382) Продолжить; забыл
Если Условие3 Тогда БезусловноеЗавершение = Истина; Продолжить; КонецЕсли; |
|||||||||||||
386
Rabbit
29.06.11
✎
15:35
|
(382)
Пока Условие1 И НЕ БезусловноеЗавершение Тогда Последовательность1(); Пока Условие2 И НЕ БезусловноеЗавершение Тогда Последовательность2(); Если Условие3 Тогда БезусловноеЗавершение = Истина; Продолжить; КонецЕсли; КонецЦикла; Последовательность3(); КонецЦикла И брюки превращаются... |
|||||||||||||
387
ado
29.06.11
✎
15:43
|
(380) Ты ничего не понял.
|
|||||||||||||
388
ado
29.06.11
✎
15:53
|
(386) А я добалю состояние и чуть поправлю диаграму переходов:
|
|||||||||||||
389
Ахиллес
29.06.11
✎
16:03
|
(388) Получил вывих мозга от твоего кода. Если ты методичку пишешь, тогда у тебя "Если" не может заканчиваться на "ИначеЕсли", ибо одно это уже рвёт мозг и заставляет лихорадочно искать последнюю "Иначе". Сидишь и думаешь, то ли пора очки заказывать, то ли автор кода где то ошибся, то ли так и было задумано.
|
|||||||||||||
390
ado
29.06.11
✎
16:07
|
(389) >> Если ты методичку пишешь, тогда у тебя "Если" не может заканчиваться на "ИначеЕсли"
Я ж не виноват, что в 1С оператора выбора нет. Приходится иначееслями заменять. А код может быть трудно читается с непривычки, зато хорошо рисуеццо ;-) И вообще, декларативно описывается. |
|||||||||||||
391
miki
29.06.11
✎
16:09
|
(390)Case можно сэмулировать СЗ
|
|||||||||||||
392
Mnemonic1C
29.06.11
✎
16:11
|
Никогда не пользовался, дите С++ и джави, поэтому
Другое |
|||||||||||||
393
Rabbit
29.06.11
✎
16:15
|
Хотелось бы обратить внимание на факт опосредованного отношения теоремы Бома — Якопини к учётным системам вообще и к 1С "XYZ" в частности.
|
|||||||||||||
394
Rabbit
29.06.11
✎
16:17
|
(392) а что говорит C++ о (379)?
|
|||||||||||||
395
ado
29.06.11
✎
16:18
|
(390) Конечно, если уж совсем читстоу стиля блюсти, то следовало бы написать так:
|
|||||||||||||
396
Ахиллес
29.06.11
✎
16:19
|
(390)>Я ж не виноват, что в 1С оператора выбора нет. Приходится иначееслями заменять.
Пиши так: ИначеЕсли Сост = 3 Тогда Последовательность3(); Если Усолвие1() Тогда Сост = 1; Иначе Сост = 4; КонецЕсли; Иначе // нифига не делаем КонецЕсли; Тогда, я буду спокоен, я буду знать, что ты обработал все возможные условия, а не просто заюыл про "Иначе" |
|||||||||||||
397
ado
29.06.11
✎
16:19
|
(391) Хмм, без ИначеЕсли?
Как? |
|||||||||||||
398
ado
29.06.11
✎
16:20
|
(396) А вот это уже занудство ;-)
|
|||||||||||||
399
Ахиллес
29.06.11
✎
16:21
|
(398) Это методически правильное занудство :-)
|
|||||||||||||
400
ado
29.06.11
✎
16:22
|
(394) Да все то же самое, только там switch-case будет.
|
|||||||||||||
401
Rabbit
29.06.11
✎
16:28
|
(400) там можно более красивую чем в (391) таблицу изменения состояний наваять
|
|||||||||||||
402
ado
29.06.11
✎
16:31
|
(401) Более красивую можно и в 1С наваять. Просто я на скорую руку.
|
|||||||||||||
403
Rabbit
29.06.11
✎
16:32
|
(402) или поставить несчастный goto))
|
|||||||||||||
404
ado
29.06.11
✎
16:33
|
(403) Это неспортивно!
|
|||||||||||||
405
fisher
29.06.11
✎
17:30
|
(388) Как раз хотел сказать, что необходимость в безусловном выходе и хитрых скачках гоуту по хитрым веткам чаще всего появляется при кривых попытках реализации диаграммы состояний. Помню, в какой-то из веток это уже обсасывали.
Но я настаиваю, что даже при реализации (386) в лоб на флагах, код будет более читабелен, хотя и более громоздок. Бегло разбирая чужие алгоритмы (или свои спустя время) часто пропускаешь безусловные переходы в глубоких ветвлениях, что чревато неприятными сюрпризами. Как минимум, заметив потом использование меток, придется заново переосмысливать уже вроде бы разобранный блок. Ведь при разборе кода в первую очередь опираешься на целостные структурные блоки, а гоуту ломает их целостность и усложняет восприятие. |
|||||||||||||
406
Fragster
гуру
29.06.11
✎
17:31
|
||||||||||||||
407
Сергей Д
29.06.11
✎
17:32
|
Бывает, что неиспользование настолько усложняет задачу, что проще и быстрее использовать. Хотя сам уже лет 10 не пользовался.
Использовать можно, но в крайнем случае |
|||||||||||||
408
skiller3000
29.06.11
✎
21:47
|
если очень хочется то можно (c)
Использовать можно, но в крайнем случае |
|||||||||||||
409
Asirius
29.06.11
✎
22:24
|
Когда я был студентом, я оптимизировал выход из рекурсии с помощью GOTO. Жестко, на ассемблере. Вместо PUSP, POP (все параметры функции передаются через стек) банальноее GOTO и зачистка регистра стеков на расчетное количество вызовов.
Это все равно, что в 1С сделать из тела функции перейти в другую процедуру, наплевав на все параметры. Препод сначала хотел двойку за такое поставить, но потом оказалось, что мой код побил предыдущий рекорд среди его студентов в 6 раз. Задачка на обход доски шахматным конем, С 12 секунд до 2 секунд на первом пне 133. Использовать можно, но в крайнем случае |
|||||||||||||
410
NS
29.06.11
✎
22:31
|
2 секунды - очень долго для такой задачи.
Выход из рекурсии производится только когда нашли решение - у кого-то он десять секунд занимал?! Бред какой-то. |
|||||||||||||
411
skunk
30.06.11
✎
04:17
|
в ассемблере гоуту ... вот это на самом деле жестко
|
|||||||||||||
412
skunk
30.06.11
✎
04:18
|
а за решение явно надо было двойку ставить ...и отчислять из института
|
|||||||||||||
413
Fragster
гуру
30.06.11
✎
08:19
|
(411) да ладно, в ассемблере 95% переходов - условные, а гоуту - безусловный
|
|||||||||||||
414
Rabbit
30.06.11
✎
12:16
|
(413) ну да, ну да... а перепрыг альтернатив чем делать? на два условных один безусловный
|
|||||||||||||
415
Fragster
гуру
30.06.11
✎
12:18
|
(414)а, ну да :)
|
|||||||||||||
416
_Atilla
01.07.11
✎
08:52
|
(395) Адо, ты прав, можно обходится без ГОТО.
Также можно обходится идти влево, если постоянно идти вправо. Земля ведь круглая, так? |
|||||||||||||
417
_Atilla
01.07.11
✎
08:53
|
(413) Ну и что? Разве нельзя поставить условие для ГОТО?
|
|||||||||||||
418
andrewks
01.07.11
✎
08:53
|
(417) в jmp то?
|
|||||||||||||
419
Vetal_978
01.07.11
✎
09:08
|
нет
Да, GOTO - нельзя использовать |
|||||||||||||
420
skunk
02.07.11
✎
09:18
|
(417)было бы прикольно посмотреть
|
|||||||||||||
421
ДенисЧ
02.07.11
✎
09:20
|
(420 открой для себя фортран :-)
|
|||||||||||||
422
skunk
02.07.11
✎
09:22
|
(421)речь идет об ассемблере ... и даже конкретной команды jmp
|
|||||||||||||
423
0xFFFFFF
02.07.11
✎
16:26
|
Поскольку "Использовать можно, но в крайнем случае", поэтому лучше раз и навсегда сказать себе
Да, GOTO - нельзя использовать |
|||||||||||||
424
pectopatop
02.07.11
✎
18:53
|
Читабельность конечно стадает, но иногда (очень редко) вместо наворотов кучи флагов/циклов и прочей байды удобнее и быстрее сделать через ГОТО
Использовать можно, но в крайнем случае |
|||||||||||||
425
МастерВопросов
07.07.11
✎
10:49
|
Сравните и сделайте вывод какой код легче читать?
Задача: Выполнить некие действия только для трёх пользователей: "Вася,Федя,Степа". Причем Степе предоставить право выбора делать/не делать эти действия. 1.Вариант с (Go To)- коротко и читабельно: Пользователи = "0001,0002,0003"; Если Найти(Пользователи,СокрЛП(глПользователь.Код))>0 Тогда Если (СокрЛП(глПользователь.Код)="0003") И (Вопрос("Стёпа, хочешь это сделать прямо сейчас?",4)<>6 Тогда) Тогда Перейти ~Метка1; КонецЕсли; //начало неких действий //... //конец неких действий КонецЕсли; ~Метка1; 2. Вариант без GO TO - громоздко и трудно читаемо: Пользователи = "0001,0002"; Если Найти(Пользователи,СокрЛП(глПользователь.Код))>0 Тогда //начало неких действий //... //конец неких действий КонецЕсли; Если СокрЛП(глПользователь.Код))>"0003" Тогда Если Вопрос("Стёпа, хочешь это сделать прямо сейчас?",4)=6 Тогда //начало неких действий //... //конец неких действий КонецЕсли; КонецЕсли; |
|||||||||||||
426
Волшебник
07.07.11
✎
10:53
|
(425) За программный код, рассчитанный на конкретных пользователей (с проверкой на код элемента справочника), надо отрывать руки, независимо от наличия GOTO
|
|||||||||||||
427
Ненавижу 1С
гуру
07.07.11
✎
10:58
|
(425) бред...
Если ЭтоВасяФедя или (ЭтоСтепа и СтепаСогласен()) Тогда |
|||||||||||||
428
fisher
07.07.11
✎
11:06
|
(427) Только лучше что-то вроде
Если ЕстьПраво() И (НЕ НужноИнтерактивноеПодтверждение ИЛИ ПолучитьИнтерактивноеПодтверждение()) Тогда |
|||||||||||||
429
Волшебник
07.07.11
✎
11:09
|
(427) Так лучше:
Если ЭтоВася или ЭтоФедя или (ЭтоСтепа и СтепаСогласен()) Тогда |
|||||||||||||
430
МастерВопросов
07.07.11
✎
11:10
|
(427)(429) нифига себе! Заводить отдельную функцию "СтепаСогласен()", в которой еще громоздить кучу кода это вы считаете улучшением читабельности?
|
|||||||||||||
431
extrim-style
07.07.11
✎
11:17
|
обойдусь без GOTOв
Да, GOTO - нельзя использовать |
|||||||||||||
432
IKSparrow
07.07.11
✎
11:42
|
Если ЭтоВася() = Истина Тогда
Перейти ЭтоВася КонецЕсли; Если ЭтоВася() = Ложь Тогда Перейти ЭтоНеВася; КонецЕсли; Лучше использовать, чем чаще, тем лучше |
|||||||||||||
433
Ненавижу 1С
гуру
07.07.11
✎
11:44
|
(430) не надо ничего заводить, это метакод, замени ее своим Вопрос()
|
|||||||||||||
434
vs84
07.07.11
✎
11:57
|
Во всем нужно руководствоваться здравым смыслом, а не догмами.
Другое |
|||||||||||||
435
МастерВопросов
07.07.11
✎
12:00
|
(433) я пробовал так:
"Если (СокрЛП(глПользователь.Код)="0003") И (Вопрос("Стёпа, хочешь это сделать прямо сейчас?",4)=6) Тогда" Вопрос у каждого юзера вылазит. |
|||||||||||||
436
Ненавижу 1С
гуру
07.07.11
✎
12:07
|
(435) в 8-ке нет ))
|
|||||||||||||
437
Rabbit
07.07.11
✎
12:10
|
(425) можно ввести цикл с параметром и брякать его
|
|||||||||||||
438
Fragster
гуру
07.07.11
✎
12:12
|
Если НужноЧтотоДелать() Тогда
// что-то делаем КонецЕсли; и весь свой овнокод в функцию локализовать, чтобы человека, который потом это будет читать - сразу на клавиатуру не вырвало |
|||||||||||||
439
Reset
07.07.11
✎
12:58
|
В (425) не пример использования goto, а пример неумения построить стройные логические конструкции. Каша после такого программиста будет равно нечитаемой как с goto, так и без.
|
|||||||||||||
440
МастерВопросов
07.07.11
✎
13:01
|
(437)(438) вот меня как раз уже тошнит от ваших бесконечных функций и прыганий по ним, а от шедевра:
Для НомерИтерации=1 П 2 Цикл Если НомерИтерации=1 Тогда ... иначе ... КонецЕсли КонецЦикла материться хочется |
|||||||||||||
441
Rabbit
07.07.11
✎
13:04
|
(440) чо?... а что это у тебя?
|
|||||||||||||
442
МастерВопросов
07.07.11
✎
13:04
|
(439) Задача озвучена.
Твоё стройное решение в студию... З.Ы.: Обязательным условиям является повышенная читабельность кода |
|||||||||||||
443
fisher
07.07.11
✎
13:07
|
(435) Не понял. А в исходном коде почему тогда не вылазит? Всех троих Стёпой обзывать должно.
|
|||||||||||||
444
Rabbit
07.07.11
✎
13:11
|
(440)
Пользователи = "0001,0002,0003"; Если Найти(Пользователи,СокрЛП(глПользователь.Код))>0 Тогда Для БудетПрерывание=1 По 1 Цикл // сразу говорит о прерывании Если (СокрЛП(глПользователь.Код)="0003") И (Вопрос("Стёпа, хочешь это сделать прямо сейчас?",4)<>6 Тогда) Тогда Прервать; КонецЕсли; //начало неких действий //... //конец неких действий КонецЦикла; КонецЕсли; |
|||||||||||||
445
vudo
07.07.11
✎
13:13
|
Использовал метки в обработке подключения торгового оборудования. Связано было с тем, что касса свои порты опрашивает в цикле, и если ВК не попадала, то связь не получалась... Также могла отвалится по тайм-ауту и приходилось переподключаться. Метки позволили избежать многократного повторения отдельных участков кода. Я просто накручивал счетчик ошибок и перемещался к нужной метке для следующего процесса подключения. Код стал прост и понятен, несмотря на использования меток, а было черт ногу сломит!
Использовать можно, но в крайнем случае |
|||||||||||||
446
Reset
07.07.11
✎
13:14
|
(442) лол
СтепаСогласен=Истина; ВходитВСписокТрех=СписокТрех.НайтиПоЗначению(текПользователь); // или как там будет задано правило. Если ВходитВСписокТрех тогда Если текПользователь=Степа тогда СтепаСогласен=Вопрос(блабла); КонецЕсли; КонецЕсли; Если ВходитВСписокТрех И СтепаСогласен тогда /// КонецЕсли; |
|||||||||||||
447
proger2011
07.07.11
✎
13:15
|
Вирите нет? Всю жизнь обхожусь без меток, прервать и продолжить как учили. Когда ваяю код в мысли даже не приходят варианты с этими опереторами.
Да, GOTO - нельзя использовать |
|||||||||||||
448
smaharbA
07.07.11
✎
13:15
|
пингвинофилы есть в ветке ?
|
|||||||||||||
449
smaharbA
07.07.11
✎
13:17
|
именно так
Лучше использовать, чем чаще, тем лучше |
|||||||||||||
450
Rabbit
07.07.11
✎
13:19
|
(446) какой Стёпа на всё согласный))
|
|||||||||||||
451
Reset
07.07.11
✎
13:20
|
Не помню, отвечал или нет на голосовалку.
При реальной необходимости использовать можно. Но это возникает чрезвычайно редко. Совершенно не помню, когда использовал последний раз, наверное в школе на gw basic (это было Очень давно :) ). Использовать можно, но в крайнем случае |
|||||||||||||
452
Reset
07.07.11
✎
13:21
|
(450) Ну да, получается, в отсутcnвие Степы считаем его согласным на все по дефолту :D
|
|||||||||||||
453
alxxsssar
07.07.11
✎
13:40
|
(451) Точно. Я за 10 лет работы с 1с только 2 или 3 раза пользовал и то можно было обойтись, но код громоздкий получался
|
|||||||||||||
454
Torquader
07.07.11
✎
13:49
|
Если рассматривать язык 1С как язык программирования, то в нём без Goto приходится сильно извращаться, так как:
- Нет стандартного цикла Do {Тело} Loop While {Условие}, а писать While 1=1 ещё более глупо, чем Goto. - Нет возможности выхода сразу из нескольких циклов. Приходится или писать Goto за пределы цикла (что очень неудобно из-за необходимости вводить метки и задавать им имена) или выносить циклы в отдельную процедуру, чтобы использовать Return (что тоже не всегда удобно и сильно усложняет читаемость). - Возможность повторения кода с начала после устранения ошибки. Тут или Goto или "вечный цикл" и Continue (не знаю, но применение Goto выглядит более понятным, чем цикл). Поэтому, если и используется Goto, то нужно писать комментарий, чтобы было понятно, где у нас находится метка. Использовать можно, но в крайнем случае |
|||||||||||||
455
Fragster
гуру
07.07.11
✎
13:51
|
(454) все реализуется подпрограммами
|
|||||||||||||
456
Rabbit
07.07.11
✎
13:53
|
(455) не всегда наглядно
|
|||||||||||||
457
Найч
07.07.11
✎
13:58
|
а что такое GoTo ? =)
|
|||||||||||||
458
Fragster
гуру
07.07.11
✎
13:58
|
(456) это да. но у меня, например, при массовом перепроведении и блокировках используется конструкция
Для СчПопыток = 1 по МаксимумПопыток Цикл Попытка // действия Прервать; Исключение Если НеОшибкаБлокировки(ОписаниеОшибки()) Тогда Прервать; КонецЕсли; глПауза(20); КонецПопытки; КонецЦикла; |
|||||||||||||
459
Fragster
гуру
07.07.11
✎
13:59
|
фигово, но с метками - хуже
|
|||||||||||||
460
Torquader
07.07.11
✎
13:59
|
(455) Иногда для понимания алгоритма проще, чтобы был один текст, который занимает два-три экрана, чем пять-шесть экранов процедур, в которые приходится передавать кучу параметров.
|
|||||||||||||
461
Torquader
07.07.11
✎
14:01
|
(459) А если понадобится внутри алгоритма повторить выполнение его сначала (например, поменяли условие), то цикл будет выглядеть ещё более непонятно (особенно, если выход нужно сделать из вложенного цикла) - с метками проще, чем заводить всякие флаги завершения или переключения режима обработки.
|
|||||||||||||
462
Fragster
гуру
07.07.11
✎
14:04
|
(461) в (459) и есть "повторение алгоритма сначала"
|
|||||||||||||
463
Fragster
гуру
07.07.11
✎
14:07
|
меня бесит только отсутствие конструкции ОбработкаПрерыванияПользователя("ЧтоВыполнятьВСлучаеПрерывания"). ну и лямбда фукнкций вместо "выполнить()"
|
|||||||||||||
464
МастерВопросов
07.07.11
✎
14:07
|
(460) Воооот! Истину глаголишь!
+мульон и всё такое прыгание по функциям и процедурам весьма весьма за... особо когда один и тот же параметр стописят раз переименовывется от функции к функции |
|||||||||||||
465
Fragster
гуру
07.07.11
✎
14:08
|
(464) а ты не переименовывай
|
|||||||||||||
466
Torquader
07.07.11
✎
14:08
|
В (459) Нет вложенных циклов.
Например: // Начало алгоритма While 1=1 Do // исполняем предварительную часть DoPart1(); // Исполняем какой-то цикл ContinueFlag=0; For i=1 To 10 Do // что-то выполняем DoPart2(); If RepeatCondition()=1 Then // здесь предполагается переход на начало // то есть проще было бы написать Goto ~НачалоИсполнения; ContinueFlag=1; Break; EndIf; EndDo; If ContinueFlag=1 Then Continue;EndIf; EndDo; |
|||||||||||||
467
Torquader
07.07.11
✎
14:10
|
(465) Основная проблема в скорости исполнения, если при каждом вызове функции мы передаём три-четыре параметра.
Хотя, при достаточном умении можно и вложенные циклы в один загнать. |
|||||||||||||
468
GoldenDawn
07.07.11
✎
14:10
|
наверное когда просят примеры кода прислать они не только сами кодить не умеют на 1С но ещё и ищут GOTO
всё так серьёзно с этим GOTO |
|||||||||||||
469
Fragster
гуру
07.07.11
✎
14:11
|
(466) херня какая-то написана. зачем там флаг - непонятно
|
|||||||||||||
470
Torquader
07.07.11
✎
14:12
|
(469) А как перейти к началу, если мы находимся во внутреннем цикле ?
|
|||||||||||||
471
Fragster
гуру
07.07.11
✎
14:13
|
(470) я так понял, что после If ContinueFlag=1 Then Continue;EndIf; ты забыл написать, что там типа еще код есть
|
|||||||||||||
472
proger2011
07.07.11
✎
14:14
|
(470) Пересмотреть алгоритм, сделать по другому. Я не знаю почему но когда я кодидирую мне даже в мысли не приходять break, continue, goto. Я бы точно такое не написал (466)
|
|||||||||||||
473
Torquader
07.07.11
✎
14:15
|
(471) Ну да - предполагается, что условие проверки на повторение в середине вложенного цикла (и проверяется на каждой итерации), а после вложенного цикла могут быть другие вычисления и, в том числе, тоже вложенные циклы.
|
|||||||||||||
474
Torquader
07.07.11
✎
14:17
|
(472) Проще вложенные циклы вынести в отдельные процедуры, которые возвращают код результата, а уже по этому коду и действовать, но, переписывать передачу параметров и не забывать их считать и правильно передать - тоже не так просто.
|
|||||||||||||
475
Torquader
07.07.11
✎
14:19
|
Например, в VbScript или Java (JavaScript) goto нет, но никто от этого не умер.
А в 1С создатели, видимо, без Goto не справились - и, слава богу, что нельзя использовать GoTo для входа в циклы и условия - то есть "макаронные сопли" исключены. |
|||||||||||||
476
proger2011
07.07.11
✎
14:19
|
У меня может опыта кодирования мало, но я вобще не понимаю где такая конструкция может пригодиться
While 1=1 Do |
|||||||||||||
477
Fragster
гуру
07.07.11
✎
14:20
|
(470) для (458) есть ВызватьИсключение.
просто так сохраняются логические блоки, а с перейти - предсказать, куда автор эту самую метку поставил - невозможно |
|||||||||||||
478
Rabbit
07.07.11
✎
14:20
|
(476) мало у тебя опыта
|
|||||||||||||
479
proger2011
07.07.11
✎
14:21
|
Или вот это например. Чётко указали что хотим сделать десять шагов и тутже Break. Я так не могу кодить...
For i=1 To 10 Do // что-то выполняем DoPart2(); If RepeatCondition()=1 Then // здесь предполагается переход на начало // то есть проще было бы написать Goto ~НачалоИсполнения; ContinueFlag=1; Break; EndIf; EndDo; |
|||||||||||||
480
Reset
07.07.11
✎
14:21
|
(466) В даннном конкретном случае - заменить While 1=1 на
While ContinueFlag Можно еще изобретать конструкции, где goto необходимо. На поверку в 99% случаев окажется, что плохо спроектирован алгоритм. В 1% (или 0.1%) случаев - да, пригодится. У меня за, наверное, с полсотни тысяч строк на 1С, таких случаев не было. |
|||||||||||||
481
Fragster
гуру
07.07.11
✎
14:21
|
потому что 1с - филосовский язык:
Пока Истина... |
|||||||||||||
482
GoldenDawn
07.07.11
✎
14:24
|
вот ниачем ваще спор - сколько раз запускал замер производительности - любая кодова охинея ничто по сравнению с чтением какого-нибудь чего-то
никто не обязан придерживаться каких-то стандартов читабельность главное, отступы интервалы и имена переменных, а то некоторые пишут как на коленке дыр налезает на пыр как бы там ни было гениально а читать эту срамоту противно |
|||||||||||||
483
smaharbA
07.07.11
✎
14:31
|
(459) тыж истинный пингвинофил, как же тогда это (ведь элементарно без готушек) ?
|
|||||||||||||
484
ado
07.07.11
✎
15:19
|
(425) А так не проще?
|
|||||||||||||
485
ado
07.07.11
✎
15:23
|
+(484) Либо так:
|
|||||||||||||
486
fisher
07.07.11
✎
15:26
|
(476) Нигде. Это просто плохой стиль, который удобно применять, если лень задумываться о читабельности кода.
|
|||||||||||||
487
ado
07.07.11
✎
15:33
|
+(485) На худой конец так:
|
|||||||||||||
488
ado
07.07.11
✎
15:51
|
(484)(485)(486) Но лучше всего так, как преложено в (446), ибо опираться на особенности вычисления 1С-ом логических выражений я бы не стал.
|
|||||||||||||
489
fisher
07.07.11
✎
17:15
|
(488) Тогда так:
Если ЕстьПраво() Тогда Отказ = Ложь; Если НужноИнтерактивноеПодтверждение Тогда Отказ = НЕ ПолученоИнтерактивноеПодтверждение(); КонецЕсли; Если НЕ Отказ Тогда КонецЕсли; КонецЕсли; |
|||||||||||||
490
smaharbA
07.07.11
✎
23:27
|
пингвинофилы слились ?
|
|||||||||||||
491
Rabbit
07.07.11
✎
23:29
|
(490) боюсь что я не они а они молчат
|
|||||||||||||
492
МуМу
07.07.11
✎
23:31
|
Не читал все. Мое мнение, если бюджет ограничен(цель оправдывает средства) - это оправдано. Сами используем.Но это не стратигичесткое и не управляемое решение.
|
|||||||||||||
493
smaharbA
07.07.11
✎
23:36
|
"бонзы" подтянулися ))
|
|||||||||||||
494
Rabbit
07.07.11
✎
23:38
|
(493) давай, клевещи))
|
|||||||||||||
495
Torquader
08.07.11
✎
00:51
|
Кто бы что ни говорил, но написать алгоритм вида "клеточный автомат" без меток достаточно непросто, кроме того теряется изящность и читаемость кода.
В остальных случаях использование меток серьёзных преимуществ не даёт. P.S. лучше бы в 1С грамотно реализовали вызов исключений, чем goto (реализация goto - очень простая задача). |
|||||||||||||
496
Ахиллес
12.07.11
✎
11:12
|
(492) Софтпоинт занимается оптимизацией 1С с помощью гоуту? :-)
А в связке с "если бюджет ограничен" очень двусмысленно читается. -Щас мы вам тут задёшево наоптимизируем, хренак, хренак, нафтыкали гоуту. ВСЁ! Работа сделана! :-) |
|||||||||||||
497
ado
12.07.11
✎
11:20
|
(496) Гы. Внезапно :)
|
|||||||||||||
498
palpetrovich
12.07.11
✎
11:33
|
пипец, 5 страниц из-за goto ...ивращенцы :)
|
|||||||||||||
499
ado
12.07.11
✎
11:36
|
(495) Чушь.
|
|||||||||||||
500
Ненавижу 1С
гуру
12.07.11
✎
11:36
|
500
|
|||||||||||||
501
ado
12.07.11
✎
11:37
|
(500) Ты во всех ветках караулишь? Или бота написал? :-)
|
|||||||||||||
502
Ненавижу 1С
гуру
12.07.11
✎
11:38
|
(501) нет, просто по случаю стреляю иногда
|
|||||||||||||
503
ЗлобнийМальчик
12.07.11
✎
12:06
|
мало что ли способов по другому усложнить код
Да, GOTO - нельзя использовать |
|||||||||||||
504
GANR
12.07.11
✎
14:01
|
За каким ???
Да, GOTO - нельзя использовать |
|||||||||||||
505
Rabbit
12.07.11
✎
15:12
|
только из классовой ненависти к гоутуненавистникам
Лучше использовать, чем чаще, тем лучше |
|||||||||||||
506
NS
12.07.11
✎
15:17
|
(505) Если человек не умеет использовать (допустим без потери читабельности текста) все возможности языка программирования, то он по определению ущербен. Это как шахматист, который "не играет конями".
|
|||||||||||||
507
wladimir90
12.07.11
✎
15:50
|
Любой код можно написать без использования GOTO, но иногда ставя всего лишь одну метку можно избавится от головной боли и существенно уменьшить размер кода, количество условий и прочее. Так что иногда можно и ставить метку. Но именно иногда и обязательно её комментируя.
|
|||||||||||||
508
wladimir90
12.07.11
✎
16:01
|
(506) Если ДлинаЛогина <= 2 Тогда
Сообщить("человек по определению ущербен"); КонецЕсли; |
|||||||||||||
509
NS
12.07.11
✎
16:14
|
(508) Бегом марш в википедию, читать определение ущербности.
|
|||||||||||||
510
Rabbit
12.07.11
✎
16:14
|
(508) сочувствую
|
|||||||||||||
511
wladimir90
12.07.11
✎
16:21
|
(509) Зачем? Ты тоже дал прекрасное определение, записав более чем 39%(по последним данным опроса) программистов в ущербные.
|
|||||||||||||
512
NS
12.07.11
✎
16:22
|
(511) Я не давал определение ущербности, учись читать.
|
|||||||||||||
513
wladimir90
12.07.11
✎
16:23
|
(512) отмазки левые.
|
|||||||||||||
514
NS
12.07.11
✎
16:29
|
(513) Ссылку на данное мной определение приведешь?
Или кроме значения слова "ущербный", ты в придачу не знаешь и значения слова "определение"? Что такое "ссылка" знаешь? :) |
|||||||||||||
515
wladimir90
12.07.11
✎
17:29
|
(514) Конечно дам! вот она - (506)
Признай уже что ступил. ПС Человек человеку волк, а зомби зомби зомби. |
|||||||||||||
516
NS
12.07.11
✎
18:06
|
(515) Точно, значение слова "определение" ты естественно не знаешь.
Там написано "по определению", но самого определения нет, ибо мне казалось что все знают определение (и значения) этого слова. |
|||||||||||||
517
360i
12.07.11
✎
19:02
|
Да, GOTO - нельзя использовать |
|||||||||||||
518
wladimir90
13.07.11
✎
17:23
|
(516) ПоОпределению(<Определение в озвучании писателя>). Читай СП РусЯза!
|
|||||||||||||
519
NS
13.07.11
✎
17:27
|
(518) Ну ты тормоз.
Использующий не в полной мере называется неполноценным, а неполноценный - синоним ущербного. Вот определение. Которого я в своем посте конечно-же не давал. |
|||||||||||||
520
wladimir90
13.07.11
✎
17:31
|
(519) Перечитываю твой пост 506 и сравниваю с постом 519 - один в один твое "определение", тока заменил один синоним другим.
|
|||||||||||||
521
NS
13.07.11
✎
17:36
|
(520) Я умываю руки, чему сейчас в школе учат?
Поколение пепси уже не отличает определение от его использования... |
|||||||||||||
522
Ms Test
13.07.11
✎
17:44
|
(506) +1 :)
Использовать можно, но в крайнем случае |
|||||||||||||
523
NS
13.07.11
✎
17:48
|
(520) (521) Виноват. 90-ый это уже не поколение пепси.
|
|||||||||||||
524
wladimir90
13.07.11
✎
17:57
|
(523) Скорее поколение Виндовс XP
|
|||||||||||||
525
wladimir90
13.07.11
✎
17:58
|
Может поспорим что считать поколением? :)
|
|||||||||||||
526
NS
13.07.11
✎
18:07
|
"современная Яга-школота, она же «поколение Next», поколение гламура и Камеди клаб.
Стоит отметить высер быдла, что «хуже Поколения Пепси не будет ничего». Оказалось будет. Поколение Яги тому пример. Даже сами поцреоты таки это признают." :) (с) Лукморе. http://lurkmore.ru/index.php?title=Поколение_Пепси&stable=1 |
|||||||||||||
527
Господин ПЖ
13.07.11
✎
18:25
|
я один раз использовал - доктор, я буду жить?
Использовать можно, но в крайнем случае |
|||||||||||||
528
wladimir90
13.07.11
✎
18:31
|
(526) Дааа. В наше время такого не было. Все девочки были целочки до 30 лет, а парни ходили в армию на 10 лет.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |