Skip to content

1. Tipos de Datos

Francisco Muñoz edited this page Aug 9, 2021 · 1 revision

Introducción

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 valor false. Es representado por un boolean 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 y 1010 representa al número -6. Es representado por un String nativo de Java, conteniendo únicamente ceros y unos.

Clasificación de los tipos de datos

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 o or, para más detalles revise la sección Operaciones entre tipos de datos). En esta categoría se encuentran TypeBool y TypeBinary.

Trasformaciones entre tipos de datos

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 No No No No
TypeBool Si No No No
TypeFloat No No No
TypeInt No
TypeBinary No

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.

Operaciones entre tipos de datos

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 con or 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.