Author Topic: Метки в 4.12 работают?  (Read 2174 times)

0 Members and 1 Guest are viewing this topic.

Пытливый

  • Освоившийся
  • **
  • Posts: 21
    • View Profile
Метки в 4.12 работают?
« on: September 16, 2017, 12:20:03 PM »
Code: [Select]
print("Start")
goto(EndFor)
for($n=0, $n<3)
  print($n)
if ($n=1)
goto(EndFor)
//$n=3
end_if
end_cyc
:EndFor
print("Finish")
Наблюдается полный игнор goto
Возможно конечно что я как-то неправильно с метками работаю. Тогда где я косячу?

open_78

  • Активный участник
  • ***
  • Posts: 285
  • v4.13.014 x64
    • View Profile
Re: Метки в 4.12 работают?
« Reply #1 on: September 16, 2017, 12:29:33 PM »
Тогда где я косячу?
GOTO

Синтаксис
GOTO (label) - переводит интерпретацию на строку с меткой


Параметры
label - имя метки


Пример

goto(skip)

logwrite("nope") // пропускается
skip:
logwrite("yea")  // выполнится



Примечания
Переход на метку допускается в рамках блоков одного уровня вложенности. Текстовая метка задается без кавычек, в тексте скрипта после текстовой метки обязательно должно идти двоеточие ":", как в примере. Метка занимает всю строку

Вопрос: ГДЕ ТЫ КОСЯЧИШЬ?
Ответ: СПРАВКУ НЕ ЧИТАЕШЬ!

Пытливый

  • Освоившийся
  • **
  • Posts: 21
    • View Profile
Re: Метки в 4.12 работают?
« Reply #2 on: September 16, 2017, 12:33:06 PM »
Я уже сам понял, что двоеточие не с той стороны, хотя вроде раз 10 примеры посмотрел. Разные языки, разный синтаксис. Бывает.
« Last Edit: September 16, 2017, 12:37:08 PM by Пытливый »

open_78

  • Активный участник
  • ***
  • Posts: 285
  • v4.13.014 x64
    • View Profile
Re: Метки в 4.12 работают?
« Reply #3 on: September 16, 2017, 12:44:55 PM »
Мало того. Еще и из цикла через GOTO() выпрыгиваешь. А этого делать не рекомендуется.

Пытливый

  • Освоившийся
  • **
  • Posts: 21
    • View Profile
Re: Метки в 4.12 работают?
« Reply #4 on: September 16, 2017, 02:18:26 PM »
Выпрыгиваю потому-что надо его прервать по условию. Конструкция while не очень подходит под мою задачу, а стандартного Break не предусмотрено синтаксисом разработчика.
Криминала в прерывании цикла таким способом я не вижу, а вот если бы я метку поставил вне тела подпрограммы, тогда мы получили бы потенциальную проблему.
Но я от goto тоже отказался, в пользу установки счетчика цикла в максимальное значение.

open_78

  • Активный участник
  • ***
  • Posts: 285
  • v4.13.014 x64
    • View Profile
Re: Метки в 4.12 работают?
« Reply #5 on: September 16, 2017, 02:45:34 PM »
Но я от goto тоже отказался, в пользу установки счетчика цикла в максимальное значение.
Это правильно. А вот криминал.
« Last Edit: September 16, 2017, 03:03:27 PM by open_78 »

Пытливый

  • Освоившийся
  • **
  • Posts: 21
    • View Profile
Re: Метки в 4.12 работают?
« Reply #6 on: September 16, 2017, 03:20:04 PM »
Я читал эту статью, когда искал решение выхода из цикла, приведенные примеры, как я и написал ранее касаются в первую очередь подпрограмм, вызовы которых помещаются в стек и goto последовательность снятия с вершины стека нарушает. А вот в приведенном мной примере стек не используется, а потому такое прерывание вполне допустимо, хотя и стремно. Сам не люблю goto и использую их только при отсутствии других вариантов.