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
ASest un nombre entier, comme en AGK et DarkBASIC : y ranger 2.9 garde 2. UtilisezAS floatouAS float64pour 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
ASaux sigils. Un champname$perd son type texte dès qu’unnamenu apparaît ailleurs dans le programme. Évitez les noms de champ d’une lettre parmib a w u l i q f d s c: dans une méthode,SELF.w = 10est 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 = 1sur 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éeASle type. Copiez alors les champs un par un pour obtenir un enregistrement indépendant. a = bsur 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, etb.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 commeCouF). Le TYPE est accepté, maisx AS Floatdéclare alors un nombre, et les champs et méthodes de l’enregistrement manquent à l’exécution. Structure … EndStructurede PureBasic est un alias deTYPE … ENDTYPE. Son suffixe de champx.fest refusé dans un TYPE : écrivezx 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 9Dans le manuel : Enregistrements et méthodes