DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Aide / WLangage / Syntaxe WLangage / Déclaration des variables
  • Présentation
  • Inférence de type : affectation par copie
  • Syntaxes
  • Fonctionnement
  • Les types simples gérés par l'affectation par copie
  • Inférence de type : affectation par référence
  • Syntaxes
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
Présentation
L'inférence de type permet de simplifier la déclaration des variables dans le cas où le compilateur peut déduire automatiquement le type de la variable. Le principe est simple. Le type de la variable est alors déduit en fonction de la valeur qui est affectée à la variable.
L'affectation de la valeur peut être réalisée :
Inférence de type : affectation par copie

Syntaxes

1. Inférence simple :
soit <Variable> = <Valeur>
où :
  • <Variable> correspond au nom de la variable à déclarer.
  • <Valeur> correspond à la valeur affectée à la variable à déclarer.
2. Inférence multiple :
soit (<Variable 1>, ..., <Variable N>) = (<Valeur 1>, ..., <Valeur N>)
où :
  • <Variable 1> ... <Variable N> correspondent aux noms des variables à déclarer.
  • <Valeur 1> ... <Valeur N> correspondent aux valeurs affectées à chaque variable à déclarer.

Fonctionnement

Lors de l'affectation par copie, si le type de la variable peut être déterminé à la compilation, la variable est déclarée selon le type de la valeur. Une copie de la valeur est affectée à la variable.
Exemples :
soit Montant = 1500.69 // type réel
 
soit Ville = "Montpellier" // type chaîne
// Inférence multiple
soit (x, y) = (1, "A")
 
// Inférence multiple via une procédure renvoyant des valeurs multiples
soit (x, y) = MaProcédureARetourMultiple()
Remarque : La variable garde son type et ne change pas de type en cours d'exécution même si une autre valeur d'un type différent lui est affectée.
Si le type de la variable ne peut pas être déterminé à la compilation, le type sera déterminé au moment de l'exécution, donc dynamiquement (comme lorsque un paramètre de procédure n'est pas typé).
Par exemple :
// Cas type inconnu au moment de la compilation
PROCÉDURE MaProc(Param1)
 
soit MaVar = Param1
 
// Comme le paramètre Param1 n'est pas typé,
// son type est inconnu au moment de la compilation
// La variable Param1 sera typée du type de la valeur passée en paramètre
// au moment de l'appel de la procédure.
// La variable MaVar sera donc typée également
// du type de la variable Param1 connu uniquement au moment de l'exécution.

Les types simples gérés par l'affectation par copie

Les types simples gérés par l'affectation par copie sont les suivants :
Type de la valeurType utilisé
booléenbooléen
entier sans signe sur 1 octetentier
entier sans signe sur 2 octetsentier
entier sans signe sur 4 octetsentier sans signe sur 4 octets
entier sans signe sur 8 octetsentier sans signe sur 8 octets
entier sur 1 octetentier
entier sur 2 octetsentier
entierentier
entier sur 8 octetsentier sur 8 octets
monétairemonétaire
décimaldécimal
réel sur 4 octetsréel sur 4 octets
réelréel
caractèrecaractère
chaînechaîne (Ansi ou Unicode)
chaîne sur Nchaîne (Ansi ou Unicode)
chaîne Ansichaîne Ansi
chaîne Ansi sur Nchaîne Ansi
chaîne Unicodechaîne Unicode
chaîne Unicode sur Nchaîne Unicode
chaîne ASCIIZ sur Nchaîne Ansi
chaîne Fixe sur Nchaîne Ansi
chaîne Pascal sur Nchaîne Ansi
bufferbuffer
datedate
heureheure
dateheuredateheure
duréedurée
policepolice
procédureprocédure
Inférence de type : affectation par référence

Syntaxes

1. Inférence simple :
soit <Variable> <- <Valeur>
où :
  • <Variable> correspond au nom de la variable à déclarer.
  • <Valeur> correspond à la valeur affectée à la variable à déclarer.
2. Inférence multiple :
soit (<Variable 1>, ..., <Variable N>) <- (<Valeur 1>, ..., <Valeur N>)
où :
  • <Variable 1> ... <Variable N> correspondent aux noms des variables à déclarer.
  • <Valeur 1> ... <Valeur N> correspondent aux valeurs affectées à chaque variable à déclarer.
L'affectation par référence est disponible uniquement pour des types complexes :
  • Type Objet : Classe, Structure, Classe .NET, type avancé, ...
  • Type Conteneur : Tableau, Tableau associatif, Pile, File, Liste, ...
Lors d'une affectation par référence, la valeur de la variable de référence n'est pas copiée dans la nouvelle variable mais la nouvelle variable pointe sur la variable de référence.
Dans ce cas, si la variable qui sert de référence est modifiée, la nouvelle variable est aussi modifiée.
Exemple :
clMonClient est un cClient // classe cClient, objet clMonClient
soit clClient <- clMonClient // type classe, clClient pointe sur l'objet clMonClient
 
tabPrix est un tableau de 5 monétaires
tabPrix[1] = 500.00
tabPrix[2] = 250
 
soit tPrix <- tabPrix // type tableau, tPrix pointe sur le tableau tabPrix
AndroidWidget Android L'inférence de type par référence n'est pas supportée pour les Tableaux associatifs.
Version minimum requise
  • Version 18
Documentation également disponible pour…
Commentaires
Attention aux classes qui contiennent des images
On peut déclarer une classe en faisant "soit gclOccurence = maclasse", mais si la classe maclasse contient un membre de type image, ça génère une exception sans indiquer pourquoi.
BattleKart
04 juin 2018
Pour déclarer un numérique
soit xMonNumérique = 0n0.0
Alexandre LECLERC
07 juin 2013

Dernière modification : 25/05/2022

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