Tableau typés
    Un tableau typé contient un type d'objets unique. Il est beaucoup plus efficient que le tableau commun parcequ'il est indexé, et non associatif, et contient directement des objets de 32 ou 64 bits ou des pointeurs, plutôt que des objets dynamiques (dyn). Un tableau d'entiers est 100 fois plus rapide qu'un tableau standard. Pour les exécutable binaire, il n'y a pas de différence en Php.

 Les tableaux typés sont aussi dynamiques, on n'est pas limité par la taille initiale.


Constructeur et littéral

 Le constructeur d'un tableau typé a la forme:

   type(...éléments...)

 Le nombre d'élément va de 0 à n.

Quand il y a un seul élément, il n'y a pas de différence entre une constructeur de tableau typé et un constructeur scalaire:

  int(1)
  text("text")

 Ce n'est pas un problème lors de l'assignement, puisque l'on peut créer un tableau à un seul élément à partir d'un scalaire, mais il y a ambiguité dans une expression.

 Aussi, dans une expression on doit utiliser un tableau littéral:

  type{...éléments...}

Les accolades ont la signification "tableau de".


Tableau de "int"

 La syntaxe est:

   int[] i = int(x, y, ....)

 Une fois qu'il est déclaré, il est utilisé comme un tableau mixte, mais seuls les nombres entiers peuvent être ajoutés au tableau.
 Lors de la création on peut utiliser un constructeur ou un littéral.
 Dans une expression, seuls les tableaux d'entiers littéraux sont acceptés.

Exemples:

  int[] x = int(5)
  int[] x = int(1,2)
  int[] x = y + int{5}


Tableau de "text"

La déclaration est:

 text[] t = text(a, b, "demo", ...)

Les règles sont les mêmes que pour les entiers.


Tableau de "real", "natural", "number"

Les déclarations sont:

  real[] r    = real(1.0, 2.0, etc...)
  natural[] n = natural(1, 2, etc...)
  number[] n  = number(1, 2.0, ...)


Tableau d'objets

La déclaration est:

  class uneclasse
    ...
  /class

uneclasse objet1
uneclasse objet2
objet[] = object(objet1, objet2, ...)


Méthodes

  Les méthodes prédéfinies de tableaux typés sont les mêmes que celle du type tableau. Voir plus haut.


Assignement et conversion

Vous pouvez assigner un tableau typé à un tableau mixte:

Exemple:

 int[] i = int(...
 array a = i

 Mais vous ne pouvez créer un tableau mixte avec un constructeur typé:

Exemples:

 array a = int(1,2)          ... NON valide
 array a = array(int(1,2))   ... NON valide

 Dans tous les cas, ce n'est pas utile.
 Vous ne pouvez assigner un tableau mixte à un tableau typé, à moins d'empiler les éléments un par un avec la méthode push().

 Exemples:

 int[] i = (1,2,3)     ... NON valide, il faut écrire plutôt:
 int[] i = int(1,2,3)  ... valide.


Tableau typé et variable dynamique "dyn"

 On peut assigner un tableau typé à un dyn.

  int[] i = int(1,2)
  dyn d = dyn(i)

 Deux méthodes sont fournies pour utiliser ce dyn:

 arrayType()      retourne le type de tableau contenu dans le dyn.
 toList(int = 0)  retourne le tableau typé contenu.

 Le paramètre est le type, et est requis quand le dyn contient un tableau mixte, que l'on veut convertir en tableau typé.

 Types reconnus:

 $TYPE_INT        tableau d'entiers
 $TYPE_TEXT     
 $TYPE_REAL
 $TYPE_NATURAL
 $TYPE_NUMBER
 $TYPE_OBJECT

Exemple:

 d = dyn(int(1,2))
 if d.arrayType()
 = $TYPE_INT:
    int[] i = d.toList()
 = $TYPE_TEXT:
    text[] t = d.toList()
 /if


Assignement direct

 Pour la compatibilité avec Php, ajouter un élément à un tableau au-dela de la taille actuelle, a le même effet qu'ajouter cet élément, quelque soit l'index donné.

 Par exemple:

 int[] i = nil
 i[10] = 10

 équivaut à:  i.push(10)

 Empiler des valeurs est le moyen correct pour remplier un tableau.

 Si on veut réellement placer un élément à une position donnée, on doit remplier le tableau avec des valeurs nulles...

 for int k in 0 .. 10 let i.push(0)

 Vous pouvez maintenant placer un élément en position 10.