Операторы 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 не действует, поскольку в этом случае просто выполняется весь сценарий.