Можноли выполнить GOTO на метку в другой процедуре ?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Можноли выполнить GOTO на метку в другой процедуре ?

Сообщение ALX_2002 » 07.04.2005 (Чт) 13:07

Челы... столкнулся вот с какой траблой...

Можно ли сделать каким нибудь GOTO на метку в другой процедуре ?

Т.е

Код: Выделить всё
Sub Sub1()
Goto METKA
End Sub

Sub Sub2()
METKA:
End Sub


В MSDN написано, что можно переходить только на метку в своей сабе

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 07.04.2005 (Чт) 13:15

Нет.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 07.04.2005 (Чт) 13:52

Код: Выделить всё
Sub Sub1()
GotoMETKA
End Sub

Sub GotoMETKA()

End Sub


:lol:

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 07.04.2005 (Чт) 14:09

Konst_One Что-то мне подсказывает, что это не совсем то, что нужно. Нужно, что бы программа возвращалась после GOTO уже не в процедуру1, а при скачке в процедуру2 начиналась не сначала :) Можно через Ж, заведя флаги, где в самом начале процедуры2 будет проверяться, как мы сюда попали и либо просто продолжать, либо скакать GOTO куда надо, а в процедуре1 проверять после Call Sub2 тоже, но я думаю, что узнав, что просто напрямую прыгнуть нельзя, сразу найдется "нормальное" решение :)

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 07.04.2005 (Чт) 14:15

это шутка же :D

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 07.04.2005 (Чт) 14:20

Konst_One писал(а):это шутка же :D
Блин, смайлик тебе надо было внутри кода написать, а то незаметно нифига :) Зато может человеку ну позарез надо переход на другую метку сделать и теперь он через несколько Ж..П и с кучей багов но таки кА-Ак прыганет в другую процедуру... Никаким дебагером потом не поймаешь :)

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 07.04.2005 (Чт) 15:16

да, прыгать из одной процедуры на метку в другую - это сильно.

видно , для начала этому программеру стоит нарисовать для наглядности алгоритм работы программы, а уже потом строчить процедуры :wink:

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 07.04.2005 (Чт) 15:22

И где, хотелось бы мне знать, такое может понадобиться? Надо уметь правильно проектировать программы, а не лезть ...
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 07.04.2005 (Чт) 15:27

Оффтоп
Все-таки программирование на VB морально развращает человка
Goto, Gosub, блин. Си в углу стоит и хихикает.

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 07.04.2005 (Чт) 20:02

А что, в C нет goto :?: :o
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 07.04.2005 (Чт) 20:07

Выходите те, кто использует GoSub. У меня как раз завалялась крупная партия минометов, опробуем :D
Моду создают модоки, а распространяют модозвоны.

KDima
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 759
Зарегистрирован: 14.07.2004 (Ср) 23:14
Откуда: СПб

Сообщение KDima » 07.04.2005 (Чт) 20:14

Код: Выделить всё
Sub Sub1()
Sub2
End Sub

Sub Sub2(Optional CallМетка As Boolean = False)
If CallМетка Then GoTo МЕТКА
METKA:
End Sub


:roll: :wink:
Хороший прогер не тот, кто всё знает, хороший прогер знает, где найти знание.

Последний раз редактировалось: Administrator (15.07.2004 (Вт) 00:01), всего редактировалось 999 раз(а)

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 07.04.2005 (Чт) 20:25

2 ANDLL
msdn писал(а):It is good programming style to use the break, continue, and return statement in preference to goto whenever possible.


John Carmack (who create ID Software) писал(а):...
If who or in mine the command of developers will start to use the operator goto, it will be immediately dismissed. To all partners I recommend to deal with it never.
...


Думаю, комментарии излишни :)

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

GM
programador
programador
 
Сообщения: 1427
Зарегистрирован: 24.06.2003 (Вт) 15:56
Откуда: 194.67.52.100

Сообщение GM » 08.04.2005 (Пт) 6:59

И все же в некоторых случаях без них не обойтись:
on error goto home
home:
или в таком случае, вместо continue, ну тут в принципе можна но все равно:
for i = 1 to 1000
for j = 1 to 1000
...
...
if <условие> then goto continuej
...
...
continuej:
next
next
الفيجوال بيسك الرابح

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 08.04.2005 (Пт) 7:34

GM писал(а):И все же в некоторых случаях без них не обойтись:
on error goto home
home:
или в таком случае, вместо continue, ну тут в принципе можна но все равно:
for i = 1 to 1000
for j = 1 to 1000
...
...
if <условие> then goto continuej
...
...
continuej:
next
next

Обойтись можно почти всегда.

On Error Resume Next

If Not <условие> Then
...
End If

Exit For
Lasciate ogni speranza, voi ch'entrate.

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 08.04.2005 (Пт) 9:20

xolod, а почему John Carmack на таком странном языке разговаривает?

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 08.04.2005 (Пт) 10:16

2 uhm
А ты на сайт к нему зайди и спроси, может ответит. А от туда из статьи вырезал это давненько.

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 08.04.2005 (Пт) 10:19

KDima писал(а):
Код: Выделить всё
Sub Sub1()
Sub2
End Sub

Sub Sub2(Optional CallМетка As Boolean = False)
If CallМетка Then GoTo МЕТКА
METKA:
End Sub


:roll: :wink:
Не совсем так. Когда ты скачешь по GOTO метка, предполагается, что ты там и останешься (хотя куда программе тогда вообще из второй процедуры возвращаться), а у тебя после прыжка на метку, программа снова потом вернется на следующую строку опосля окончания процедуры2. Поэтому одной попой тут не обойдешьси :) Еще проверки надо добавлять :)

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 08.04.2005 (Пт) 10:30

Sub2 : Exit Sub

Но это бред.
Lasciate ogni speranza, voi ch'entrate.

marvan
Бывалый
Бывалый
 
Сообщения: 269
Зарегистрирован: 22.06.2004 (Вт) 13:26
Откуда: Москва

Сообщение marvan » 08.04.2005 (Пт) 11:31

согласен с ANDLL на тему проетирования
если один кусок кода нужен в нескольких местах - ему прямая дорога в отдельную процедуру.

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 08.04.2005 (Пт) 11:52

[off]
xolod, а что за сайт?

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Сообщение codemaster » 08.04.2005 (Пт) 13:14

alibek писал(а):Обойтись можно почти всегда.

On Error Resume Next

If Not <условие> Then
...
End If

Exit For


Готов поспорить!
Для VB6 GoTo вполне естественный оператор.
Не говоря о правилах принятых в команде разработчиков:

Одна точка выхода из проц. функции
Глобальный Err Log и пр.


John Carmack (who create ID Software) писал(а):

...
If who or in mine the command of developers will start to use the operator goto, it will be immediately dismissed. To all partners I recommend to deal with it never.



Вообще неуместная цитата в контексте VB6.


P.S. Глупо с приемами игры на скрипке подходть к пианино :wink:


[/code]
//<-
Mit freundlichen Grüßen
//->

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 08.04.2005 (Пт) 13:21

codemaster, он был естественнен на GW-BASIC. Уже в QBasic без него можно было почти всегда обойтись, а в VB его имеет смысл применять разве что для обработчиков ошибок.
Lasciate ogni speranza, voi ch'entrate.

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Сообщение codemaster » 08.04.2005 (Пт) 13:39

alibek писал(а):codemaster, он был естественнен на GW-BASIC. Уже в QBasic без него можно было почти всегда обойтись, а в VB его имеет смысл применять разве что для обработчиков ошибок.


Итак немного кода:
Код: Выделить всё
  With adoRs
  If Not .EOF Then
    If m_IsDeleted Then
      .Delete
    Else
SaveRecord:
      adoRs("...") =
      .....
      .....
      adoRs("...") =
      .Update
      m_ID = adoRs("...")
    End If
  Else
    If Not m_IsDeleted Then
      .AddNew
      GoTo SaveRecord
    End If
  End If
  .Close
  End With



а теперь попробуем его записать "читаемо и коротко" без GOTO.
//<-
Mit freundlichen Grüßen
//->

marvan
Бывалый
Бывалый
 
Сообщения: 269
Зарегистрирован: 22.06.2004 (Вт) 13:26
Откуда: Москва

Сообщение marvan » 08.04.2005 (Пт) 13:57

"читаемо и коротко" без GOTO
Код: Выделить всё
  With adoRs
  If m_IsDeleted Then
    If .EOF Then
      .Delete
    End If
  Else
    If .EOF Then
      .AddNew
    End If
    adoRs("...") =
    .....
    .....
    adoRs("...") =
    .Update
    m_ID = adoRs("...")
  End If
  .Close
  End With

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 10.04.2005 (Вс) 15:52

2xolod:
гугл писал(а):Не найдено ни одного документа, соответствующего запросу "If who or in mine".


Прошу воспроизвести цитату точно, либо отказаться от обвинений Кармака в кривом языке.
Изображение

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 10.04.2005 (Вс) 16:31

Гы гы гы :)
По запросу в Яндексе "(Кармак|Carmack) +goto" нашёл (после нескольких дополнительных кликов) вот это вот: http://parser2.parser.ru/forum/message_1445.html
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 10.04.2005 (Вс) 18:40

2 tyomitch
Повторяю, вырезал давно из статьи для статьи своей. Либо сам что поправил тогда (и уже не помню), либо он так и изрекался.
Не хочу я никого обвинять. В конце концов, если быть честным, Кармак не коренной Американец. Так что "правильность его языка" - это все от лукавого

2 GSerg
Yandex - проект Лебедева, не удивительно что он тебя на Parser вывел.
:lol:

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 10.04.2005 (Вс) 19:26

Во челы вы разгнались....... :shock: Я уже давно траблу решил другим методом :). :D

Но всё равно всем спасибо. И респект вам общий. :)

След.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 181

    TopList