A MAXScript programozási nyelv

Alprogramok, modulok

Szintaxis

Egy függvénydefiníció szintaxisa: [mapped] (function | fn) <függvény_név> { <parameter> } = <expr>. A mapped kulcsszó segítségével készíthetünk olyan függvényeket, amelyek automatikusan alkalmazhatók majd gyűjteményekre. A függvények lehetnek rekurzívak is. A függvények nem feltétlen kötődnek osztályokhoz, vagy struct-okhoz, lehetnek globálisak is, mint amilyen a 3ds Max rendszer által felkínált rendszerfüggvények nagy része.

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 )

A MAXScript nyelvben vannak függvényváltozók is: egy változóhoz hozzárendelhetünk egy függvényt, így például tömbben tárolhatunk függvényeket, amelyek kiértékelése során a tárolt függvény értékelődik ki az átadott paraméterekre. Függvény továbba lehet paraméter is, azaz átadható magasabbrendű függvényeknek (olyan függvény, amelynek valamely argumentuma vagy eredménye is függvény), hasonlatosan a funkcionális nyelvekben megszokott viselkedéshez.

-- néhány 3d-s felületet adó függvény fn saddle x y = sin x * sin y fn sombrero x y = cos (x^2 + y^2) / (1 + (x^2 + y^2)) surface_functions[1] = saddle -- eltároljuk egy tömbben a függvényeket surface_functions[2] = sombrero -- meghívjuk az egyiket a tömbből z = (surface_functions[i]) 10 10 -- átadhatjuk valamelyiküket magasabbrendű függvénynek is: build_math_mesh sombrero

Paraméterátadás

A MAXScipt alapértelmezés szerint érték szerint kapja meg a paramétereket, azonban lehetőség van referencia szerinti paraméterátadásra is, a C++-ban megszokott módon, a paramétert & jellel megelőzve. A referenciákkal nem dolgozhatunk azonban közvetlenül, szükség van dereferáló prefix operátorra, a * operátorra. Függvény értékét visszaadni return <kifejezés> kifejezés segítségével tudjuk, azonban teljesítményokokból a ciklusból való kilépéshez hasonlóan ellenjavalt a használata!