Template:Scripting array

From TOI-Pedia

Arrays

Een array is een geordende reeks van waarden, waarbij alle waarden in de reeks van hetzelfde type zijn .

Net als een enkelvoudige waarde wordt een array opgeslagen in een variabele. De declaratie van een array variabele heeft minimaal de volgende vorm:

type $arrayNaam[];

De vierkante haakjes onderscheiden de declaratie van een array variabele van een gewone variabele.

In MEL kan een array een variabel length hebben. Om deze reden is het niet noodzakelijk de lengte van de array te vermelden in de declaratie.

In de declaratie van een array variabele kan wel een initial length aangegeven worden:


type $arrayNaam[initiëleLengte];

Echter, MEL houdt hier geen rekening mee en de array is in eerste instantie leeg (lengte gelijk aan 0).

Zoals bij een gewone variabele kan de array variabele tijdens de declaratie ook geïnitialiseerd worden:

type $arrayNaam[] = {initiëleWaarden};

De verschillende initiële waarden worden met komma's gescheiden, en met accolades omsloten. De initiële lengte van de array is in dit geval gelijk aan het aantal initiële waarden.

Example:

float $hoogtes[] = {0.255, 0.255, 0.35, 0.35, 0.35, 0.16};

print($hoogtes);


Een array kan ook beschouwd worden als een reeks van variabelen, waarbij elke variabele van hetzelfde type is. Door middel van de positiebepaling van de variabele in de reeks kan toegang gekregen worden tot deze individuele variabele. Bijv, het toekennen van een waarde aan (een positie in) een array heeft de volgende vorm:

$arrayNaam[index] = waarde;

De index bepaalt de positie in de array:

  • het eerste element in een array heeft index 0 (!)
  • de grootste index in een array is steeds het aantal elementen min één
  • Example:

    string $array[] = {"eerste\n", "tweede\n", "derde\n"};

    print($array[0]); // Prints "eerste\n"

    print($array[1]); // Prints "tweede\n"

    print($array[2]); // Prints "derde\n"


    De lengte van een array

    In MEL kan een array een variabele lengte hebben. De initiële lengte van een array wordt bepaald in de declaratie.

    Met de functie size() kan de length van een array opgevraagd worden:

    print(size($array)); // 3

    Door waarden aan een array toe te kennen kan de lengte van een array gewijzigd (verlengd) worden:

    $array[4] = "vijfde\n";

    print(size($array)); // 5

    Posities in de array die geen waarde toegekend zijn, hebben automatisch de defaultwaarde (dit zijn dezelfde defaultwaarden als bij de declaratie van een gewone variabele, dus, voornamelijk 0 of ""). Het maakt daarbij niet uit of de index van deze positie kleiner dan wel groter is dan de lengte van de array.

    print($array[3]); // 0

    print("\n");

    print($array[33]); // 0

    print("\n");

    print(size($array)); // 5

    Met de functie clear() kan een array leeggemaakt worden. De lengte is dan 0:

    clear($array);

    print(size($array)); // 0


    Het gebruik van arrays

    Een array kan als datastructure gebruikt worden. Wanneer je meerdere waarden van eenzelfde type, die in betekenis een zekere relatie hebben tot elkaar, wil opslaan is het eenvoudiger een array te declareren en te hanteren dan een reeks individuele variabelen.

    Zo kan een (voorgedefinieerde) functie, in plaats van een enkele waarde, een array van waarden teruggeven.

    Examples:

    Een MEL commando voor het aanmaken van een Maya object geeft de naam van het object terug. Door het commando in de vorm van een functie te schrijven, kan je de naam toekennen aan een variabele. Echter, een Maya object zoals een kubus, bestaat uit niet één maar twee of meerdere objecten. In het geval van een polygonen kubus zijn dit de kubus als concept (pCube) en als vorm (pCubeShape). Het commando geeft dus niet één maar meerdere namen terug.

    Example:

    string $namen[] = polyCube();

    print($namen);

    De meeste MEL commando's maken het mogelijk een of meerdere objecten te specificeren waarop je het commando toepast. Indien geen objecten gespecificeerd worden, dan wordt het commando toegepast op de geselecteerde objecten. Je kan in MEL een lijst van de geselecteerde objecten krijgen met behulp van het commando ls -selection .

    Example:

    string $selectie[] = ls("-selection");

    print($selectie);

    MEL kent een functie tokenize() om een string op te delen in kleinere strings overeenkomstig een of meerdere opgegeven opdeeltekens. De functie neemt twee of drie argumenten: de string die opgedeeld zal worden, een string met opdeeltekens (deze string is optioneel, indien niet opgegeven wordt de spatie als opdeelteken gebruikt) en een string array. De functie geeft het aantal gevonden deelstrings terug en plaatst deze deelstrings in de bijgeleverde string array.

    Example:

    string $buffer[];

    tokenize("A/B//C/D", "/", $buffer);

    // Result: 4 //

    tokenize("A/B//C/D", "//", $buffer);

    // Result: 4 //

    print($buffer);


    Vectoren

    Een vector is een drie-dimensionale waarde, een serie van 3 decimale getallen. Deze serie wordt omsloten met dubbele haakjes << ... >> en de getallen met komma's gescheiden.

    Example:

    vector $vector = <<3.0, 7.7, 9.1>>;

    print($vector);

    De afzonderlijke delen (waarden) van een vector kunnen met behulp van de suffixen .x, .y en .z verkregen worden (De suffixnotatie met gebruik van het punt als koppelteken is een objectnotatie; MEL beschouwt een vector enigszins als een object met drie attributen x, y en z.)

    Example:

    print($vector.x + "\n"); // 3.0

    print($vector.y + "\n"); // 7.7

    print($vector.z + "\n"); // 9.1

    Deze notatie kan echter niet gebruikt worden om waarden toe te kennen aan de afzonderlijke delen:

    $vector.y = 5.5;

    // Error: $vector.y = 5.5; //

    // Error: Syntax error //

    Eigenlijk kan je alleen de waarde van de hele vector ineens wijzigen, maar onrechtstreeks kan je er toch voor zorgen dat slechts een enkel deel gewijzigd wordt:

    $vector = << $vector.x, 5.5, $vector.z >>;

    // Result: <<3, 5.5, 9.1>> //
    Personal tools
    Actions
    Navigation
    Tools