Операторы if-then-else

Логические операторы НЕ, И, ИЛИ

В одном условном операторе может быть указано несколько условий. Для этой цели служат логические операторы НЕ (not), И (and) и ИЛИ (or). Нижеприведенрядсоответствующихпримеров.

if (not s.radius == 10) then messagebox "Radius is not 10."

if (x == 5 and y == 6) then z = 0

if (x == 5 or y == 6) then z = 0


Основы MAXScript

Если оператор not окажется не совсем удобным, условие "не равно" можно проверить и по-другому, используя синтаксис if != , например:

if s.radius != 10 then messagebox "Radius is not 10."

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

if (x == 5 or y == 6) and z == 10 then w = 0

if x == 5 or (y == 6 and z == 10) then w = 0

Если в сложном выражении опущены круглые скобки, порядок его вычисления может быть определен с помощью правил предшествования логических операторов. Такие правила определяют старшинство одних логических операторов над другими при вычислении выражения. Наивысшим приоритетом обладает оператор НЕ, который вычисляется в первую очередь. Операторы И и ИЛИ вычисляются слева направо, причем оператор И имеет больший приоритет: x and y or z

В соответствии с правилами предшествования приведенное выше выражение без круглых скобок эквивалентно следующему выражению: (x and y) or z

То же самое имеет место и в следующем выражении: not x or y and z

Оно эквивалентно выражению (not x) or (y and z)

Напомним, что новые операторы сценария вводятся в MAXScript с новой строки, а для продолжения оператора на следующей строке служит обратная косая черта (\). Но из этого правила имеется исключение для конструкции if-then: части if и then условного оператора могут указываться в отдельных строках. Ведь после выражения if непременно должно следовать выражение then, поэтому его можно поместить в следующей строке:

b = box()

if b.height != 10.0

then b.length = 40.0

Приведенная выше конструкция дает такой же результат, как и следующая:

b = box()

if b.height != 10.0 then

b.length = 40.0

Оператор b.length указан с отступом для обозначения того факта, что он яв­ляется частью условия if-then. Это делается только ради повышения удобочи­таемости кода сценария.


Глава 1

Если ввести фрагмент кода из предыдущего примера в приемнике команд, то ничего особенного при этом не произойдет. Объясняется это особенностями управляющей структуры if-then-else. Простую конструкцию if-then можно расширить, дополнив ее выражением else, причем каждая из частей if, then и else условного оператора может быть указана в отдельной строке, например:

if b.pos == 10

then b.height = 40

else b.height = 80

Выражение else дает возможность указать альтернативное действие, если ус­ловие внутри выражения if не выполняется. Напомним, что операторы выполняются в приемнике команд построчно по мере их ввода. В следующем выражении будет показано, каким образом приемник команд реагирует на ввод оператора if-then-else.

1. Введите в приемнике команд следующее выражение:
b = box()

2. Введите следующее выражение:

if b.pos.x == 0 then b.height = 40

После ввода данного выражения объект не изменился, а приемник команд никак не отреагировал на это выражение — ни положительным результатом, ни сообщением об ошибке.

 

 

 


Ведь приемнику команд неизвестно, собираетесь ли вы ввести далее оператор else. Ему требуется завершенная структура if-then-else, прежде чем выполнять код сценария MAXScript. Если в следующей строке вы введете выражение else, приемник команд будет знать, что делать дальше. Если же выражения else не окажется в следующей строке, приемник команд предположит, что его и не следует ожидаь.

3. Введите в приемнике команд следующее выражение: elseb.height = 10.0

Теперь приемник команд отреагирует, и высота параллелепипеда изменится до величины 40,0 единиц.


Основы MAXScript

 

 

 


4. Введите следующий фрагмент кода и нажмите комбинацию клавиш <Shift+Enter> после каждой введенной строки:

if b.pos.x == 0 then b.height = 40

messagebox "Done"

Несмотря на отсутствие в этом фрагменте кода выражения else, приемник команд будет знать, что ввод этого кода завершен, и в итоге появится окно сообщения.

Примечание. Если сценарии выполняются в окне редактора сценариев по команде EvaluateAll (Вычислить все), то приведенная выше процедура ввода и вычисления конструкции if-then-else не действует, поскольку в этом случае просто выполняется весь сценарий.