Перейти к основному содержимому

13.9. Не работает многострочное условие. Как исправить?

В: Не работает многострочный код. Как исправить?

Пишу такой код:

if mark_var=1: 'Первый текст.'
'Второй текст.'
'Третий текст.'
end

Но даже если mark_var равно нулю, второй и третий текст всё равно выводятся.

О:

Необходимо различать однострочную и многострочную формы записи конструкции условия.

Вот так выглядит однострочная форма:

IF [#выражение]: [команды 1]

Как видите, за ключевым словом IF следует выражение [#выражение], и если это выражение верно, тогда выполняется набор команд [команды 1], который записан после двоеточия в той же строке, что и IF. При этом команды перечисляются через амперсанд (&).

Код из примера в однострочной форме должен будет выглядеть так:

if mark_var=1: 'Первый текст.' & 'Второй текст.' & 'Третий текст.'

Однострочную форму записи не требуется закрывать ключевым словом END, так как окончанием этой формы считается конец строки с IF.

А вот так выглядит многострочная форма записи конструкции условия:

IF [#выражение]:
[команды 1]
END

Здесь после двоеточия в той же строке, где находится и ключевое слово IF, ничего не пишется. Именно так плеер понимает, что имеет дело с многострочной формой записи. И в этом случае, если выражение [#выражение] верно, плеер ищет соответствующие верному условию команды ([команды 1]) в следующей строке после двоеточия.

Многострочная форма записи всегда закрывается ключевым словом END. Только так плеер может понять, что последующие команды уже не относятся к конструкции условия.

Код из примера в многострочной форме записи должен выглядеть так:

if mark_var=1:
'Первый текст.'
'Второй текст.'
'Третий текст.'
end

Или так:

if mark_var=1:
'Первый текст.' & 'Второй текст.' & 'Третий текст.'
end

Оба варианта являются многострочной формой записи конструкции условия.

Теперь нетрудно догадаться, почему даже когда mark_var равно нулю в исходном примере второй и ттретий тексты всё равно выводились.

Плеер встречает конструкцию:

if mark_var=1: 'Первый текст.'

и, поскольку за двоеточием в той же строке, где находится IF, идёт команда 'Первый текст.', плеер понимает, что это однострочная форма записи, а значит окончанием конструкции условия можно считать конец строки. Таким образом команды, расположенные в нижеследующих строках, для плеера попросту не относятся к конструкции условия, и он выполняет их в любом случае. END при этом игнорируется.