Функции

[mapped] (function | fn) <name> { <parameter> } = <expr>, где <name> – имя функции, <expr> – тело функции, <parameter> – ее параметры (их может не быть вообще или быть несколько), которые записываются так: <parameter name>, либо так: <parameter name>: [<operand>] – необязательное значение по умолчанию, если не его задать, возвращается значение unsupplied. Префих mapped означает, что функция будет автоматически повторно вызываться на каждом элементе коллекции, если коллекция задана в качестве первого аргумента функции.

Примеры:
function add a b = a + b
fn factorial n = if n<=0 then 1 else n * factorial(n-1) --РЕКУРСИВНАЯ ФУНКЦИЯ
mapped function rand_color x = x.wireColor = random (color 0 0 0) color (255 255 255)
fn starfield count extent: [200, 200, 200] pos: [0, 0, 0] =
(
local f = pos – extent / 2
t = pos + extent / 2
for i = 1 to count do
sphere name:”star” \
radius: (random 0.1 2.0) \
position: (random f t) \
segs:4 smooth:false
)

В качестве своего значения функция возвращает значение <expr>. Если тело функции – блок, то значение последнего выражения в блоке. Если нужно найти функцию используется метод showSource <fn>, который отображает окно Editor с файлом, содержащим данную функцию и пролистанным до места ее определения – метод полезен, когда много функций находятся в разных файлах.
Чтобы принудительно завершить выполнение функции используется оператор return <expr>, где <expr> – выражение, которому будет равно значение принудительно завершенной функции. Если return используется в функции с префиксом mapped и коллекция задана в качестве первого аргумента, возвращаемое значение будет OK, а не <expr>.


Объекты и классы в объектно-ориентированном программировании

Все величины (values), с которыми работает MAXScript, имеют четко определенный тип, например integer, matrix3, twist. Тип величины – это ее класс. В MAXScript термины величина (value) и объект (object) – синонимы. Объект – особый отдельный представитель класса. Например, Box – это класс. Это не трехмерный объект в окне проекции 3ds max, а набор характеристик, которыми этот объект box (ящик) обладает. В этих характеристиках заложены способы создания представителей класса Box (объектов box); свойства этих объектов (например, Height – высота, Width – ширина, Length – длина); операции, которые можно с ними производить (например, move – перемещение, copy – копирование, delete – стирание). Чтобы создать объект box, можно написать: b=box() В этой строке фраза box() – конструктор, который создает объект Box и возвращает на него ссылку, сохраняемую в переменной b. Здесь для конструктора не применяются никакие параметры (вроде высоты или ширины), поэтому используются значения по умолчанию, определенные в классе Box. Объект box появляется в окнах проекции 3ds max и с ним можно делать все то же самое, что и с другими трехмерными объектами. Если параметры для конструктора нужно применить, они заменят "()".
Пример: b=box width: 10 length: 100 --СОЗДАЕТСЯ ОБЪЕКТ box С УКАЗАННЫМИ ПАРАМЕТРАМИ. ОСТАЛЬНЫЕ ПАРАМЕТРЫ ИСПОЛЬЗУЮТ ЗНАЧЕНИЯ ПО УМОЛЧАНИЮ.


Определения

Properties (Свойства): Доступные параметры объектов класса. Например, ширина, длина, высота для ящиков и радиус для сфер.

Methods (Методы): Определения всех функций, которые можно вызывать для объектов класса. Примеры: перемещение или поворот объекта, применение модификатора и получение координат вершин объекта. Термины method (метод) и function (функция) в MAXScript синонимы.

Operators (Операторы): Определения всех математических и других символьных операторов, которые работают с величинами класса. Пример: оператор ”-”, который производит математическую операцию вычитания над числами, цветами, векторами и матрицами, но произведет булево вычитание, когда будет использован совместно с объектами 3ds max.

Constructors (Конструкторы): Различные способы, которыми можно создавать объекты класса. Например: Point3 0 0 0 и <color> as Point3 – конструкторы для класса Point3. Выполнение любого из них создает новый объект Point3.

Literals (Символы): Любая символьная форма объектов класса. Примеры: [0, 0, 0] – символьная форма класса Point3, слово "Hello world" – символьная форма класса String.