AX7 - 2/3 Datos primitivos
Para poder probar los ejemplos que presentaremos a continuación nos crearemos un proyecto nuevo y agregaremos una runnable class.
A continuación veremos los tipos primitivos con unos ejemplos.
- Anytype: Nos permite asignarle cualquier valor a la variable .
Si ejecutamos la clase nos mostrará algo similar a lo que se ve en la imagen.
- Boolean: A este tipo de variable se le podrá asignar un valor del tipo verdadero o falso.
- Date: Se utilizará para almacenar fechas.
Como os imagináis mkdate es una función que nos construirá una fecha con 3 valores: día, mes y año.
La función systemDateGet nos devolverá la fecha actual del sistema.
- Enums: Los enums son un tipo de dato que podemos encontrar en la aplicación.
Para este ejemplo seleccionaremos el enumerado NoYesCombo, el cuál, tiene definidos dos valores:
- GUIDs: Un GUID es un identificador único global.
Como podemos ver, en el código mediante la función createGUID de la clase winapi, nos crea un GUID que será un cadena de texto, posteriormente, convertimos ese string a un GUID.
También tenemos la posibilidad de utilizar la función newGuid().
- Int: Almacenan valores numéricos enteros.
Aunque el valor de la variable num será de 12.3456, en la imagen sólo se imprimen dos decimales. Esto es por la manera en la que he realizado la impresión por pantalla con la función strFmt, ya que esta lo convierte a dos decimales.
- TimeOfDay: Se utiliza para almacenar tiempo(horas).
La función info siempre requiere que se le pase un string, así que utilizamos la función time2StrHMS (Existen otras funciones para representar el tiempo); lo que nos devolverá el número que le hemos pasado a time.
- utcdatetime: Este tipo de variable es capaz de almacenar un fecha y hora.
Si recordáis que nos devolvía la función systemDateGet, os podréis imaginar que devuelve la función timeNow.
A continuación veremos los tipos primitivos con unos ejemplos.
- Anytype: Nos permite asignarle cualquier valor a la variable .
class Test
{
static void main(Args args)
{
AnyType value;
value = 1; //Asignamos un entero
info(strFmt("%1" , value));
value = "Test"; //Asignamos un texto
info(strFmt("%1" , value));
value = 3.25; //Asignamos un valor numérico con decimales
info(strFmt("%1" , value));
value = [10, "Test"]; //Asignamos un container
info(strFmt("%1 - %2" , conPeek(value, 1), conPeek(value, 2)));
}
}
{
static void main(Args args)
{
AnyType value;
value = 1; //Asignamos un entero
info(strFmt("%1" , value));
value = "Test"; //Asignamos un texto
info(strFmt("%1" , value));
value = 3.25; //Asignamos un valor numérico con decimales
info(strFmt("%1" , value));
value = [10, "Test"]; //Asignamos un container
info(strFmt("%1 - %2" , conPeek(value, 1), conPeek(value, 2)));
}
}
Si ejecutamos la clase nos mostrará algo similar a lo que se ve en la imagen.
Si os da un error al ejecutar el job, revisar este post.
class Test
{
static void main(Args args)
{
Boolean isValid = true;
if (isValid)
{
info("Es válido.");
}
else
{
warning("No es válido.");
}
}
}
{
static void main(Args args)
{
Boolean isValid = true;
if (isValid)
{
info("Es válido.");
}
else
{
warning("No es válido.");
}
}
}
Probad a cambiar el true por un false para ver que sucede.
También aceptará como válido lo siguiente:
Boolean isValid = 1;
y no es válido:
Boolean isValid = 0;
Cualquier cosa que pueda ser interpretada como un booleano, AX lo convertirá en un booleano..
Boolean isValid = 1 + 1 == 2 ;
o lo siguiente:
- Date: Se utilizará para almacenar fechas.
class Test
{
static void main(Args args)
{
date d = mkDate(1,1,2016);
date d1 = systemDateGet();
info(strFmt("d: %1", d));
info(strFmt("d1: %1", d1));
info(strFmt("Diff: %1", d1 - d));
}
}
{
static void main(Args args)
{
date d = mkDate(1,1,2016);
date d1 = systemDateGet();
info(strFmt("d: %1", d));
info(strFmt("d1: %1", d1));
info(strFmt("Diff: %1", d1 - d));
}
}
Como os imagináis mkdate es una función que nos construirá una fecha con 3 valores: día, mes y año.
La función systemDateGet nos devolverá la fecha actual del sistema.
Para este ejemplo seleccionaremos el enumerado NoYesCombo, el cuál, tiene definidos dos valores:
Al utilizarlo se nos desplegarán los posibles valores de éste.
class Test
{
public static void main(Args _args)
{
NoYesCombo ret = NoYesCombo::Yes;
if (ret == NoYesCombo::Yes)
{
info ("Has seleccionado sí.");
}
}
}
{
public static void main(Args _args)
{
NoYesCombo ret = NoYesCombo::Yes;
if (ret == NoYesCombo::Yes)
{
info ("Has seleccionado sí.");
}
}
}
- GUIDs: Un GUID es un identificador único global.
class Test
{
public static void main(Args _args)
{
str guidstr = Winapi::createGUID(); //Versiones anteriores
guid guidLocal;
info(guidstr);
guidLocal = str2Guid(guidstr);
info (strFmt("%1", guidLocal));
guidLocal = newGuid(); //.net
info(guid2Str(guidLocal));
}
}
{
public static void main(Args _args)
{
str guidstr = Winapi::createGUID(); //Versiones anteriores
guid guidLocal;
info(guidstr);
guidLocal = str2Guid(guidstr);
info (strFmt("%1", guidLocal));
guidLocal = newGuid(); //.net
info(guid2Str(guidLocal));
}
}
Como podemos ver, en el código mediante la función createGUID de la clase winapi, nos crea un GUID que será un cadena de texto, posteriormente, convertimos ese string a un GUID.
También tenemos la posibilidad de utilizar la función newGuid().
class Test
{
static void main(Args args)
{
int value = 10;
info(strFmt("%1" , value));
int value2 = 5;
info(strFmt("%1" , value + value2));
int total = value + value2;
info(strFmt("Resultado %1 + %2: %3" , value, value2, total));
info(strFmt("Resultado %1 - %2: %3" , value, value2, value - value2));
info(strFmt("Resultado %1 * %2: %3" , value, value2, value * value2));
info(strFmt("Resultado %1 / %2: %3" , value, value2, value / value2));
}
}
{
static void main(Args args)
{
int value = 10;
info(strFmt("%1" , value));
int value2 = 5;
info(strFmt("%1" , value + value2));
int total = value + value2;
info(strFmt("Resultado %1 + %2: %3" , value, value2, total));
info(strFmt("Resultado %1 - %2: %3" , value, value2, value - value2));
info(strFmt("Resultado %1 * %2: %3" , value, value2, value * value2));
info(strFmt("Resultado %1 / %2: %3" , value, value2, value / value2));
}
}
- Int64: la diferencia con int es que tienen la capacidad de almacenar 64 bytes.
32 bits = 232 = 4294967296 valores diferentes.
64 bis = 264 = 18446744073709551616 valores diferentes.
Los valores anteriores son sólo positivos, en caso de utilizar negativos, la cantidad se divide entre positivos y negativos.
Si vemos el resultado en la imagen le hemos asignado a un entero un valor muy alto del cual sólo podrá almacenar 2147483647 (ya que Ax utiliza valores positivos y negativos), al sumarle 1 unidad en un int64 (variable total), vemos como ha superado esa capacidad.
- Real: Tiene la capacidad de almacenar números con decimales.
class Test
{
public static void main(Args _args)
{
real num = 12.3456;
info (strFmt("%1", num));
}
}
{
public static void main(Args _args)
{
real num = 12.3456;
info (strFmt("%1", num));
}
}
Aunque el valor de la variable num será de 12.3456, en la imagen sólo se imprimen dos decimales. Esto es por la manera en la que he realizado la impresión por pantalla con la función strFmt, ya que esta lo convierte a dos decimales.
- Strings: Se utilizan para almacenar carácteres o cadenas de texto.
class Test
{
public static void main(Args _args)
{
Str literal = "Texto que se mostrará por pantalla";
info (literal);
}
}
{
public static void main(Args _args)
{
Str literal = "Texto que se mostrará por pantalla";
info (literal);
}
}
- TimeOfDay: Se utiliza para almacenar tiempo(horas).
class Test
{
public static void main(Args _args)
{
TimeOfDay time = 60; //Representa 60 segundos
info (time2StrHMS(time));
time = 90;
info (time2StrHMS(time));
}
}
{
public static void main(Args _args)
{
TimeOfDay time = 60; //Representa 60 segundos
info (time2StrHMS(time));
time = 90;
info (time2StrHMS(time));
}
}
La función info siempre requiere que se le pase un string, así que utilizamos la función time2StrHMS (Existen otras funciones para representar el tiempo); lo que nos devolverá el número que le hemos pasado a time.
- utcdatetime: Este tipo de variable es capaz de almacenar un fecha y hora.
class Test
{
public static void main(Args _args)
{
utcdatetime transdate = DateTimeUtil::newDateTime(systemDateGet(), timeNow());
info (strfmt("%1", transdate));
}
}
{
public static void main(Args _args)
{
utcdatetime transdate = DateTimeUtil::newDateTime(systemDateGet(), timeNow());
info (strfmt("%1", transdate));
}
}
Si recordáis que nos devolvía la función systemDateGet, os podréis imaginar que devuelve la función timeNow.
Comentarios
Publicar un comentario