Hasta ahora, sólo había una forma de crear una propiedad de clase:
property <propertyName> : <type>
A partir de 4D 20 R5, mejoramos la declaración de propiedades. Al igual que para las variables, ahora puede declarar e inicializar su propiedad en una sola línea, como se describe a continuación:
tipo inferido
property <propertyName> := <value>
Aquí, el tipo se omite y será determinado por el compilador o intérprete basándose en el valor proporcionado. Para evitar errores de compilación, es aconsejable emplear este enfoque exclusivamente con tipos escalares originados por valores, comandos o métodos.
Ejemplo:
//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
Tipo declarado e inicialización
property <propertyName> : <type> := <value>
En cuanto a la declaración devariables, la propiedad se crea con el tipo dado y luego se inicializa con el valor.
Este tipo de declaración debe utilizarse cuando se inicializa una propiedad con un tipo como un atributo de clase, una variable interproceso o una global. Si no especifica el tipo en estos casos, el intérprete y el compilador evaluarán el no podrán determinar el tipo y utilizarán un tipo variante en su lugar. Por ejemplo:
property myAttribute:=JSON Parse(GetJson()).myAttribute
// The interpreter and the compiler don't know the type of JSON Parse(GetJson()).myAttribute.
// The myAttribute property is declared as a variant