-
Notifications
You must be signed in to change notification settings - Fork 0
1. Tipos de Datos
Una de las partes más importantes para representar la realidad en un programa son los tipos de datos que puedan crearse, almacenarse y operarse. Este proyecto provee algunos tipos de datos elementales para crear un programa simple, en particular, se provee de los siguientes tipos de datos:
-
TypeStrings: Utilizados para representar un texto simple. Es representado por un
String
nativo de Java. -
TypeBool: Utilizados para representar un tipo booleano, esto es, un valor
true
o un valorfalse
. Es representado por unboolean
nativo de Java. -
TypeFloat: Utilizado para representar un número flotante, o en términos matemáticos,
un número real, como por ejemplo 1.3333 o 3.1416. Es representado por un
double
nativo de Java. -
TypeInt: Utilizado para representar un número entero, como por ejemplo -3 o 42.
Es representado por un
int
nativo de Java. -
TypeBinary: Utilizado para representar un número entero como un número binario.
Cabe mencionar que para representar un negativo en binario se utiliza su
complemento dos para este propósito.
Por ejemplo,
0110
representa al número 6 y1010
representa al número -6. Es representado por unString
nativo de Java, conteniendo únicamente ceros y unos.
Dados los distintos tipos de datos, estos se pueden clasificar en distintas categorías dependiendo de su comportamiento. Más precisamente:
- SType: Estos son todos los tipos de datos mencionados anteriormente. Es decir, TypeString, TypeBool, TypeFloat, TypeInt y TypeBinary.
- SNumber: Corresponden a todos aquellos que se consideran números. Es decir, TypeFloat, TypeInt y TypeBinary.
- SInteger: Corresponden a todos aquellos tipos que representan a un entero. En esta categoría entran TypeInt y TypeBinary.
-
SLogical: Corresponden a todos aquellos que tienen una representación lógica
(con 0 o 1), o bien, se pueden operar con operadores lógicos (como
and
oor
, para más detalles revise la sección Operaciones entre tipos de datos). En esta categoría se encuentran TypeBool y TypeBinary.
Existe la posibilidad que se desee transformar un tipo de dato en otro. Esto se puede
hacer mediante instrucción aType.toType<otherType>()
donde <otherType>
puede
ser un String, Bool, Float, Int o Binary.
Las distintas transformaciones entre tipos de datos se resumen en la siguiente tabla:
Tipos | TypeString | TypeBool | TypeFloat | TypeInt | TypeBinary |
---|---|---|---|---|---|
TypeString | Sí | No | No | No | No |
TypeBool | Sí | Si | No | No | No |
TypeFloat | Sí | No | Sí | No | No |
TypeInt | Sí | No | Sí | Sí | Sí |
TypeBinary | Sí | No | Sí | Sí | Sí |
O bien, en términos de la clasificación de tipos de datos:
- SType: Permite la transformación a TypeString.
- SNumber: Permite la transformación a TypeFloat.
- SInteger: Permite la transformación a TypeInt y TypeBinary.
Donde el único caso distinto es TypeBool que adicionalmente posee la transformación a TypeBool.
Se provee además de distintas operaciones entre los tipos. Estas son:
-
add
: Corresponde a la suma de dos tipos. -
sub
: Corresponde a la resta de dos tipos. -
mult
: Corresponde a la multiplicación de dos tipos. -
div
: Corresponde a la división de dos tipos. -
neg
: Corresponde a la negación del tipo actual. -
and
: Corresponde a la disyunción de dos tipos. -
or
: Corresponde a la conjunción de dos tipos.
Donde las distintas operaciones entre tipos se resume en la siguiente tabla:
Tipos | TypeString | TypeBool | TypeFloat | TypeInt | TypeBinary |
---|---|---|---|---|---|
TypeString | add |
add |
add |
add |
add |
TypeBool |
and , or
|
and , or
|
|||
TypeFloat |
add , sub , mult , div
|
add , sub , mult , div
|
add , sub , mult , div
|
||
TypeInt |
add , sub , mult , div
|
add , sub , mult , div
|
add , sub , mult , div
|
||
TypeBinary |
and , or
|
add , sub , mult , div
|
add , sub , mult , div , and , or
|
O bien, se puede resumir utilizando la clasificación mencionada:
- TypeString: Puede ser sumado con cualquier SType y devuelve un TypeString.
-
TypeBool: Puede ser operado con
and
o conor
con cualquier SLogical y devuelve un TypeBool si fue operado con otro TypeBool o devuelve un TypeBinary si se opera con un TypeBinary. - TypeFloat: Puede ser operado con cualquier SNumber y devuelve un SNumber. En la mayoría de los casos, devuelve un TypeFloat.
- TypeInt: Puede ser operado con cualquier SNumber y devuelve un SNumber. Siendo más precisos, devuelve un TypeFloat si se opera con un TypeFloat y devuelve un TypeInt en el resto de los casos. En el caso de la división, retorna la división redondeada si es operado con un SInteger.
- TypeBinary: En el caso de los operadores aritméticos, puede ser operado con cualquier SInteger y devuelve un SInteger. En la mayoría de los casos, devuelve un TypeBinary. En el caso de la división, retorna la división redondeada si es operado con un SInteger. Por otro lado, en el caso de los operadores lógicos, si es que se opera con otro binario, entonces la operación se hace carácter por carácter, extendiendo al número binario más pequeño manteniendo su valor numérico original.