Syntaxe

Déclare un type d’enregistrement : un groupe de champs nommés, chacun avec son type. Un enregistrement est une valeur : l’affecter à une variable déclarée en fait une copie complète.

TYPE <Name>
  <field> [AS <type>] [[<last index>, …]]
  LIST <field>.<type>()
  MAP <field>.<type>()
  ARRAY <field>.<type>(<last index>, …)
  [METHOD …]
ENDTYPE
TYPE <Name> <field> [AS <type>] … ENDTYPE
Structure <Name> … EndStructure
<variable> AS <Name> [= <record>]

S’écrit aussi : ENDTYPE, Structure, EndStructure

Les éléments

<Name>Le nom du type. La casse ne compte pas. Deux types de même nom sont refusés.
<field>Un nom de champ. La casse ne compte pas, et deux champs de même nom sont refusés.
<type>Le type du champ : integer, float, string, uint8… ou un autre type d’enregistrement, même déclaré plus bas. Dans les champs LIST et MAP, une lettre de PureBasic comme i ou s.
<last index>Le dernier indice valide d’une dimension du tableau, pas le nombre de cases.
<variable>Une variable qui contient un enregistrement de ce type.
<record>Un autre enregistrement à copier, ou NEW <Name>(…).

À savoir

  • Un champ sans sigil ni AS est un nombre entier, comme en AGK et DarkBASIC : y ranger 2.9 garde 2. Utilisez AS float ou AS float64 pour les positions et les vitesses.
  • Le mot de fin est ENDTYPE. END TYPE (QBasic, Visual Basic) est refusé. La forme sur une ligne n’accepte que des champs simples ; les champs LIST, MAP, ARRAY et les méthodes demandent la forme longue.
  • Préférez AS aux sigils. Un champ name$ perd son type texte dès qu’un name nu apparaît ailleurs dans le programme. Évitez les noms de champ d’une lettre parmi b a w u l i q f d s c : dans une méthode, SELF.w = 10 est lu comme un suffixe de type et le champ n’est jamais écrit.
  • Une variable d’enregistrement doit être déclarée avec AS. q.x = 1 sur un nom non déclaré se compile, puis arrête le programme : « q is not defined ».
  • Trois affectations partagent au lieu de copier : dans une case de tableau (fleet(1) = hero), dans un champ d’enregistrement (s.pos = v), et dans une variable non déclarée AS le type. Copiez alors les champs un par un pour obtenir un enregistrement indépendant.
  • a = b sur deux enregistrements demande s’il s’agit du même enregistrement, pas si leurs champs sont égaux.
  • Indexez un champ tableau avec une paire de crochets par dimension : b.grid[1][2]. b.grid(1, 2) arrête le programme, et b.grid[1, 2] atteint sans bruit une autre case.
  • Ne nommez pas un TYPE comme un type intégré (Integer, Int, Long, Float, Byte, ou une lettre comme C ou F). Le TYPE est accepté, mais x AS Float déclare alors un nombre, et les champs et méthodes de l’enregistrement manquent à l’exécution.
  • Structure … EndStructure de PureBasic est un alias de TYPE … ENDTYPE. Son suffixe de champ x.f est refusé dans un TYPE : écrivez x AS float.

Exemple

TYPE Vec  x AS float  y AS floatENDTYPETYPE Ship  name AS string  fuel AS integer  pos AS VecENDTYPEa AS Shipa.name = "Comet"a.fuel = 80.7a.pos.x = 3b AS Shipb = ab.pos.x = 9Console(a.name + " " + Str(a.fuel))          ' Comet 80Console(Str(a.pos.x) + " " + Str(b.pos.x))   ' 3 9