DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Aide / WLangage / Syntaxe WLangage / Déclaration des variables
  • Déclaration de structures
  • Type des membres d'une structure
  • Déclarer un membre de type tableau dans une structure
  • Copie homonymique d'une structure
  • Sérialisation des membres d'une structure
  • Quels types "avancés" peuvent être membre ?
  • Passer une structure en paramètre à une procédure
  • Ajouter le contenu d'une structure dans un tableau de structures sans passer par une variable de cette structure
  • Limites d'une structure
  • Différences entre la version 8 et la version 9
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget IOSApple WatchMac CatalystUniversal Windows 10 App
Autres
Procédures stockées
Une structure est un type de données personnalisé. Une structure regroupe des éléments de types différents.
Remarque : Si vous manipulez des variables personnalisées, il est conseillé de déclarer :
  • un type structure, si plusieurs variables de ce type sont utilisées dans différents traitements du projet.
  • une variable composée, si une seule variable de ce type est utilisée dans votre projet (par exemple utilisation ponctuelle pour passer des paramètres à une API).
Exemple
// Déclarer une structure
RefProduit est une Structure
CodeF est un entier
CodePr est une chaîne fixe sur 10
FIN
// Déclarer une variable de type structure
RefProduit est une Structure
CodeF est un entier
CodePr est une chaîne fixe sur 10
FIN
Fauteuil est une RefProduit
// Manipuler un membre d'une variable de type structure
RefProduit est une Structure
CodeF est un entier
CodePr est une chaîne fixe sur 10
FIN
Fauteuil est une RefProduit
Fauteuil:CodeF = 7
Fauteuil:CodePr = "Meuble"
// Déclarer et initialiser les membres d'une structure
point3D est une Structure
x est un entier
y est un entier
z est un entier
FIN
 
p1 est un point3D = [0, 0, 50]
Syntaxe

Déclarer une structure Masquer les détails

<Nom de la structure> est une structure
   <Membres de la structure>
FIN
<Nom de la structure> :
Nom de la structure à déclarer
<Membres de la structure> :
Déclarations des variables contenues dans la structure. Ces variables sont appelées les membres de la structure.
Lors de la déclaration des membres de la structure, il est possible d'indiquer les paramètres de sérialisation de ces membres. Pour plus de détails, consultez le paragraphe "Sérialisation des membres d'une structure".
<FIN> :
Fin de déclaration des variables.

Déclarer une variable de type structure Masquer les détails

<Nom de la variable> est une <Nom de la structure>
<Nom de la variable> :
Nom de la variable de type structure à déclarer.
<Nom de la structure> :
Nom d'une structure précédemment déclarée.

Manipuler un membre d'une variable de type structure Masquer les détails

<Nom de la variable structure>:<Nom du membre de la structure>
<Nom de la variable structure> :
Nom de la variable structure à manipuler.
<Nom du membre de la structure> :
Nom du membre de la structure à manipuler.
Il est possible d'affecter les membres d'une variable de type structure grâce à l'affectation multiple.
Remarques

Déclaration de structures

Si une structure <Nom de la structure> est déclarée :
  • dans le code du projet, il sera possible de déclarer une variable du type <Nom de la structure> dans l'ensemble du projet.
  • dans le code de déclaration des globales d'une fenêtre, il sera possible de déclarer une variable du type <Nom de la structure> dans cette fenêtre, dans les champs de cette fenêtre et dans les procédures locales associées.
  • dans le code d'ouverture d'un état, il sera possible de déclarer une variable du type <Nom de la structure> dans cet état, dans les champs de cet état et dans les procédures locales associées.
  • dans le code de déclaration d'une classe, il sera possible de déclarer une variable du type <Nom de la structure> dans cette classe et dans les méthodes de cette classe. Attention : il est nécessaire de placer "Est une structure" avant le "est une classe".
  • dans un traitement, il sera possible de déclarer une variable du type <Nom de la structure> dans ce traitement.
JavaPHP La structure doit être déclarée dans un traitement de déclaration des globales (d'une fenêtre, d'une page ou d'une collection de procédures).
WEBDEV - Code ServeurWEBDEV - Code Navigateur Remarques :
  • Une variable de type structure peut être déclarée en code navigateur à partir d'une structure déclarée en code serveur ou en code navigateur.
  • Si une variable de type structure est déclarée en code navigateur à partir d'une structure déclarée en code serveur, la structure serveur doit être composée de type simples : chaîne, entier, réel, booléen, date et heure.

Type des membres d'une structure

Les membres d'une structure peuvent être de type :
Tous les autres types de données (variable composée, constante, ...) sont interdits.
WEBDEV - Code Navigateur Une structure déclarée en code navigateur doit être composée de type simples : chaîne, entier, réel, booléen, date et heure.

Déclarer un membre de type tableau dans une structure

  • Déclarer un membre de type tableau simple :
    Les dimensions du tableau sont fixées dès la déclaration. Il est possible de modifier les dimensions du tableau avec la fonction Dimension.
  • Déclarer un membre de type tableau dynamique :
    Il est nécessaire de définir les dimensions du tableau (c'est-à-dire d'allouer le tableau) avant d'utiliser le tableau. Par exemple :
    // Déclaration d'une structure
    Struct est une Structure
    x1 est un entier
    x2 est un tableau dynamique // Déclaration du tableau
    FIN
     
    // Déclaration d'une variable de type structure
    MaStruct est une Struct
     
    // Allocation du tableau
    MaStruct:x2 = allouer un tableau dynamique de 4,7 entiers
    // Utilisation du tableau
    MaStruct:x2[1,1] = 25

Copie homonymique d'une structure

L'opérateur => permet de réaliser une copie homonymique d'une variable de type structure.
Cette copie homonymique est également réalisée en utilisant l'opérateur =.
Attention, la copie s'effectue membre à membre : seuls les membres de même nom seront copiés. Les membres de noms différents ou inexistants seront ignorés.
Exemple :
// Déclaration d'une structure
StructClientImport est une Structure
Nom est une chaîne
Prénom est une chaîne
Société est une chaîne
Adresse est une chaîne
CP est une chaîne
Ville est une chaîne
FIN
 
StructClientInterne est une Structure
Nom est une chaîne
Prénom est une chaîne
Société est une chaîne
Adresse est une chaîne
AdresseComp est une chaîne
CP est une chaîne
Ville est une chaîne
Pays est une chaîne
FIN
 
 
NouveauClient est un StructClientImport
 
ClientEnCours est un StructClientInterne
 
ClientEnCours = NouveauClient // les membres AdresseComp, Pays se seront pas renseignés

Sérialisation des membres d'une structure

Par défaut, tous les membres d'une structure sont sérialisés.
Il est possible de gérer précisément la sérialisation de chaque membre d'une structure :
  • en indiquant quel membre sera sérialisé lors de l'appel à la fonction Sérialise.
    Cette opération est possible sur tous les types de sérialisation (WXML, JSON, binaire).
  • en changeant le nom du membre lors de la sérialisation par la fonction Sérialise.
    Cette opération n'est pas possible lors d'une sérialisation binaire.
Cette gestion de la sérialisation est réalisée en utilisant la syntaxe suivante :
  • Sérialisation ou non d'un membre :
    <Nom du membre> est un <Type du membre> [, Sérialise = <Vrai / Faux>]
  • Sérialisation et changement du nom d'un membre :
    <Nom du membre> est un <Type du membre> [, Sérialise = <Nouveau nom>]
Exemple :
Cl est une Structure
// Membre sérialisé
MembreSérialisé est un entier
// Membre non sérialisé
MembreNonSérialisé est une chaîne, sérialise = faux  
// Membre renommé lors de la sérialisation
MembreRenommé est un entier, sérialise = "NouveauNomMembre"
FIN

Quels types "avancés" peuvent être membre ?

Une variable "avancée" peut être membre d'une variable "avancée". Le tableau ci-dessous présente les différentes combinaisons :
Variable composéeStructureClasseTableau
Variable composéeNonNonNonNon
StructureOuiOuiOuiOui
ClasseOuiOuiOuiOui
TableauOuiOuiOuiNon

Passer une structure en paramètre à une procédure

Une variable de type "structure" peut être passée en paramètre à une procédure. Pour cela, utilisez la syntaxe suivante :
<Nom de la procédure>(<Nom de la variable de type structure>)
Par exemple :
RefProduit est une Structure
CodeF est un entier
CodePr est une chaîne fixe sur 10
FIN
Fauteuil est une RefProduit
 
// Appel de la procédure AfficheProduit
AfficheProduit(Fauteuil)

Ajouter le contenu d'une structure dans un tableau de structures sans passer par une variable de cette structure

Si vous utilisez un tableau de structures avec peu de membres, il peut être plus simple d'ajouter directement une structure en utilisant l'opérateur [ ] (crochet).
Par exemple, pour la structure suivante :
// Structure pour mémoriser une lettre et son code ASCII
STTouche est une Structure
sTouche est une chaîne
nCodeAscii est un entier
FIN
// Tableau de structures
tabTouches est un tableau de STTouche

L'ajout se fait généralement en passant par une variable du type de la structure :
// Structure temporaire pour l'ajout
stUneTouche est un STTouche
// Mémorise la lettre A
stUneTouche.sTouche = "A"
stUneTouche.nCodeAscii = Asc("A")
tabTouches.Ajoute(stUneTouche)

Avec l'opérateur [ ], vous pouvez gagner en visibilité :
// Mémorise la lettre A
tabTouches.Ajoute(["A", Asc("A")])

Limites d'une structure

  • L'héritage de structure est interdit : une structure ne peut pas hériter d'une autre structure.
  • Il n'est pas possible de restreindre l'accès à un membre d'une structure : tous les membres d'une structure sont publics.
WINDEVWEBDEV - Code ServeurJava

Différences entre la version 8 et la version 9

Une structure contenant un membre de type caractère n'a pas le même comportement que dans les versions précédentes. En effet, les caractères occupaient 1 octet en version 8 et 2 octets en version 9.
Il est conseillé d'utiliser le type "Entier sur un octet" pour assurer un bon fonctionnement.
Version minimum requise
  • Version 9
Documentation également disponible pour…
Commentaires
Windev Mobile 24
Attention : les structures deviennent PUBLIC lors de la compilation Java du projet. Il ne faut donc pas avoir le même nom de structure dans deux fenêtres.

(erreur java duplicate class lors de la compilation Android)
Patrick MOIRE
24 déc. 2019

Dernière modification : 25/05/2022

Signaler une erreur ou faire une suggestion | Aide en ligne locale