Jusqu’à présent, il n’existait qu’une seule façon de créer une propriété de classe:
property <propertyName> : <type>
À partir de 4D 20 R5, nous améliorons la déclaration des propriétés. Comme pour les variables, vous pouvez désormais déclarer et initialiser votre propriété sur une seule ligne, comme décrit ci-dessous :
type inféré
property <propertyName> := <value>
Ici, le type est omis et sera déterminé par le compilateur ou l’interprète en fonction de la valeur fournie. Pour éviter les erreurs de compilation, il est conseillé d’utiliser cette approche exclusivement avec des types scalaires provenant de valeurs, de commandes ou de méthodes.
Exemple :
//BLOB
property myBlob:=GetBlob()
//Boolean
property myBool:=True
//Null
property myNull:=Null
//Real
property myNum:=(569/2)
//Object
property myObj:={att1: 1}
//Text
property myText:="Hello"
//Collection
property myCol:=[1; 2; 3]
//Date
property myDate:=Current date
//Time
property myTime:=Current time
//Picture
property myPicture:=GetPicture()
// Properties must be declared before class constructor or functions.
Class constructor
Type déclaré et initialisation
property <propertyName> : <type> := <value>
Comme pour la déclaration de variable, la propriété est créée avec le type donné, puis initialisée avec la valeur.
Ce type de déclaration doit être utilisé lorsque vous initialisez une propriété avec un type tel qu’un attribut de classe, une variable interprocessus ou une variable globale. Si vous ne spécifiez pas le type dans ces cas, l’interpréteur et le compilateur évalueront le type et utiliseront une variante de type à la place. Par exemple, dans 4D 20 R5, la déclaration de la propriété
property myAttribute:=JSON Parse(GetJson()).myAttribute
// L'interpréteur et le compilateur ne connaissent pas le type de JSON Parse(GetJson()).myAttribute.
// La propriété myAttribute est donc déclarée en tant que variant