Gambas Documentation
Aperçu du Langage
Assign
Boucle d'évènements
Chemins de Fichiers & Répertoires
Classes de conteneur natives
Constantes du langage
Constantes prédéfinies
Déclaration d'énumération
Déclaration d'évènement
Déclaration de constante
Déclaration de méthode
Déclaration de propriété
Déclaration de structure
Déclaration de tableau
Déclaration de variable locale
Déclaration de variables
Entiers
Expressions
Fonctions arithmétiques
Fonctions associées aux fichiers et dossiers
Fonctions de chaîne de caractères
Fonctions de conversion
Fonctions de date et de temps
Fonctions de flux et d'entrée/sortie
Fonctions de formatage
Fonctions de Localisation et Traduction
Fonctions de manipulation de bits
Fonctions de nombres aléatoires
Fonctions de test des caractères
Fonctions de type de données
Fonctions diverses
Fonctions et structures de contrôle
Fonctions intrinsèques
Fonctions logarithmiques et exponentielles
Fonctions trigonométriques
Formats définis par l'utilisateur
Gestion d'erreurs
Gestion des événements
Gestion des fonctions externes
Gestion des objets et des classes
Gestion des processus
Gestionnaires d'évènements globaux
Le modèle objet de Gambas
Méthodes de comparaison
Méthodes spéciales
Nombres
Nombres flottants
Opérateurs arithmétiques
Opérateurs d'affectation
Opérateurs de chaînes de caractères
Opérateurs logiques
Ordre d'évaluation des opérateurs
Représentation binaire des données
Structures de contrôle de boucles
Structures de contrôle diverses
Syntaxe des modes de fichier
Tableaux natifs
Tracés
Types de données
Utilisation des mots réservés comme identificateur
À traduire
Code Snippets
Comment faire ...
Compilation et installation
Composants
Controls pictures
Derniers changements
Dépôt d'applications
Documentation de l'Environnement de développement
Documentation des développeurs
Documents
Indenter
Index de tous les Documents
Index du langage
Lexique
LISEZ-MOI
Manuel du wiki
Messages d'erreur
Tutoriels
Wiki License

Déclaration de structure

PUBLIC STRUCT Identificateur
Champ 1 AS [ TypeDeDonnee ] Champ 2 AS [ TypeDeDonnee ] . . . Champ n AS [ TypeDeDonnee ]
END STRUCT

Ce mot-clé déclare une structure.

Une structure est exactement comme une classe qui n'aurait que des variables publiques.

Si vous déclarez la même structure dans deux classes différentes, elles doivent avoir exactement les mêmes champs, sinon l'interpréteur provoquera une erreur.

Alignement des champs

Les structures ne sont jamais compactées, c.a.d. les champs sont alignés à une adresse mémoire qui est un multiple de leur longueur en mémoire : Comme l’ordre de déclaration est respecté, vous pouvez avoir des trous dans votre structure. Par exemple, si vous déclarez un fichier d’octets et, juste après, un champ d’entiers, vous aurez un trou de trois octets.

Cela pose un problème : lorsqu’on compile un code source en C, le compilateur C risque de réordonner la structure des champs. Et, pour autant que je sache, ce processus n’est pas standardisé ni documenté.

Il pourra y avoir une solution dans le futur avec la bibliothèque libffi utilisée par Gambas. Apparemment, cette bibliothèque peut envoyer une structure à une fonction en C en prenant en compte ce problème. Mais cette bibliothèque est loin d’être documentée par Gambas, vous voyez donc la difficulté !

Structures intégrées

Une structure peut être intégrée dans une classe normale ou une autre structure, en déclarant une variable avec la syntaxe suivante :

[ PRIVATE | PUBLIC ] Identificateur AS STRUCT Nom de Structure

Exemple

' Fichier de classe Gambas
    
PUBLIC STRUCT Bras
  Longueur AS Float
  NombreDeDoigts AS Integer
  PorteDesGants AS Boolean
END STRUCT
    
PUBLIC STRUCT Jambe
  Longueur AS Float
  NombreDeDoigts AS Integer
  PorteDesChaussettes AS Boolean
  PorteDesChaussures AS Boolean
END STRUCT
    
PUBLIC STRUCT Humain
  Prenom AS String
  Nom AS String
  Age AS Integer
  Yeux AS String
  BrasGauche AS STRUCT Bras
  BrasDroit AS STRUCT Bras
  JambeGauche AS STRUCT Jambe
  JambeDroite AS STRUCT Jambe
END STRUCT

Tableaux de structures

Identificateur [ Dimensions ] AS STRUCT NomDeStructure

Les structures sont intégrées, c.a.d. que leur contenu est directement alloué dans le tableau.

De tels tableaux ne sont pas des tableaux réels, ils ont simplement quelques méthodes de la classe array d'origine :
  • On peut y accéder par indices.

  • Ils peuvent être énumérés.

  • Vous pouvez obtenir des informations concernant la longueur du tableau et le nombre de dimensions.

C’est tout !

Vous ne pouvez créer que des tableaux de structures intégrés.

Voir aussi