Datos simples, declaración y conversión

Todo lenguaje de programación consta de elementos específicos que le permite realizar las operaciones básicas de la programación.
  • Tipos de datos
  • Operadores
  • Instrucciones o sentencias

Categorías de tipos de datos

Los tipos de datos en Java se pueden dividir en tres grupos.

De acuerdo con el tipo de información que representa. Dependiendo del tipo se podrán realizar unas acciones u otras.
  • Datos de tipo primitivo.
  • Variables referencia (variables array, clase/instacia, interface…)
Según se pueda modificar la variable en tiempo de ejecución.
  • Variables: El valor asociado puede ser modificado por el mismo programa durante el tiempo de ejecución
  • Constantes o variables finales: El valor permanecerá inmutable durante toda la ejecución del programa.
Según el lugar de declaración.
  • Variables miembro: Definida dentro de la clase y fuera de los métodos.
  • Variables locales: Se definen dentro de un método.

Tipos de dato  primitivos en Java

En Java prácticamente todo se realiza mediante objetos, de todas maneras, existen algunas excepciones en las que se tiene que trabajar con el mínimo de memoria posible. En estos casos se utilizan datos primitivos tales como int, char, byte, etc… los cuales tienen un tratamiento especial.
A diferencia de sus representaciones como objetos los tipos primitivos no aceptan el estado ‘null’ por lo que siempre se inicializan con un dato por defecto.

A partir de los datos primitivos se puede trabajar con estructuras de tipos de datos compuestos como podrían ser los Arrays, clases e interficies.

Literales

Los literales son la representación escrita en el código fuente de un valor fijo determinado.
Las constantes de tipo booleana son, tal y como hemos visto, ‘false’ por defecto o ‘true’.
Las constantes de tipo carácter (char) se declaran entre comilla simple, de esta manera le estamos indicando al compilador, que nos interesa, literalmente, lo que tenemos dentro de estas comillas, si bien esto nos sirve con la gran mayoría de caracteres alfanuméricos y símbolos de puntuación o especiales, hay un grupo de caracteres que necesitan de un tratamiento especial, para ello se utiliza la denominada secuencia de escape, la contra barra. Por ejemplo, no es lo mismo asignar ‘t’ que asignar \t con el primero mostraríamos una t por consola, con el segundo mostraríamos una tabulación, otra manera de cargar los caracteres seria a través de octales o de códigos Unicode. En la página Unicode-Table.com (Actualmente es (◕‿◕) SYMBL) tenéis todas las combinaciones posibles de códigos Unicode y en la pagina UTF8-CharTable.DE  si seleccionáis “display Octal” podréis ver la comparativa entre Unicode y Octal, esta segunda página es más ligera, pero más compleja de usar si no se sabe lo que se busca. A continuación pongo los caracteres normalmente más usados.

Esto nos lleva a una singularidad, que si bien este no es su momento, viene al caso explicarlo, el caso de los String. Los Strings pueden ser considerados como cadena de caracteres y tal y como se ha explicado hay ciertos caracteres especiales que no se pueden escribir de manera normal. En el caso de los String a la hora de asignar se realiza con las dobles comillas (“”) de tal manera que si queremos escribir una comilla doble tendremos que hacer uso de la secuencia de escape, de esta manera la frase (el “nunca” cogió el coche) quedaría como (“el \”nunca\” cogió el coche”). Basándonos en este principio podemos utilizar cualquier secuencia de escape.
Las constantes enteras se pueden declarar como binarios,  octales, decimales o hexadecimales, si el primer digito del numero que se asigna es un ‘0 ‘ se entiende que se trata de un Octal, en la siguiente tabla vienen explicadas todas las opciones.

Las constantes reales o de coma flotante se expresan con coma decimal y opcionalmente seguidos de un exponente. Por defecto cuando se declaran son doublé, pero lo podemos modificar finalizando la declaración con una ‘f’ o ‘F’.

Desde Java 7 en los numéricos pueden aparecer caracteres de subrayado para facilitar la lectura del número, digamos que queremos declarar de manera constante una tarjeta de crédito , si ponemos todos los dígitos seguidos puede resultar difícil de leer, además las tarjetas de crédito ya tienen una separación lógica, de manera que si queremos podemos declarar un entero long tarjeta = 1234_5678_9012_3456L; y se lee mejor.

Declaración de variables

Una variable es un espacio de memoria correspondiente a un dato cuyo valor se puede modificar en tiempo de ejecución. Toda variable tiene que tener un tipo de dato y un identificador con el que poder referenciarlo. El tipo de dato indicara a Java el espacio de memoria que se tiene que reservar en memoria, los diferentes valores que puede tomar la variable y las operaciones que con ella se puede realizar.
El identificador elegido no puede coincidir con ninguna de las palabras reservadas, además debería seguir las convenciones que todos los programadores intentamos seguir.
·         La variable comienza por minúsculas: mes, clave, nombre…
·         Si el identificador es una palabra compuesta el resto de palabras van juntas y la primera letra en mayúsculas: esDivisible, numeroTarjeta, telefonoMovil
·         El carácter de subrayado puede ser usado en cualquier lugar del identificador, no obstante es aconsejable usarlo únicamente como separador de palabras en las constantes: CARGA_MAXIMA, CARGA_MINIMA,..
En el momento de declaración de las variables podemos declarar primero todas las variables y luego inicializarlas o inicializarlas según las vamos declarando.
Además podemos declarar más de una variable en la misma línea.
int n;
double x = 12.5, y = 2.0;
Pero en el caso de las constantes es aconsejable inicializarlos siempre. Al ser un ‘final’ lo que le estamos indicando es que una vez inicializado no se va a variar nunca, pero no podemos esperar a un método para poner el valor, en el mismo momento en el que se carga la clase contenedora se tiene que cargar el valor de esa variable o nos encontraremos un error en tiempo de ejecución, de esta manera si queremos que este valor se base en una decisión tenemos que ponerlo en el constructor de la clase y recordar que su valor no se va a modificar en toda la ejecución del programa.
La asignación de valor se puede posponer en el código, aunque en ningún caso su valor puede modificarse una vez ha sido inicializada ya que se generaría un error. Ejemplo de inicialización posterior a la declaración de la constante:
final int MAXIMO;
...
MAXIMO = 15;
Puede parecer que solo se inicializa una vez, pero recordemos que un tipo primitivo siempre se inicializa con un valor por defecto.
Además de estas reglas de inicialización también hay que seguir un convenio a la hora de elegir el nombre que le vamos a poner a nuestra constantes
·         Los identificadores siempre se escriben en mayúsculas. MAXIMO.
·         El carácter de subrayado es aceptable en cualquier lugar del identificador, pero es recomendable solo usarlo para separar las palabras: MAXIMO_VALOR.

Conversión entre tipos de datos

Excepto para los booleanos que no pueden ser transformados a otro tipo de dato, para el resto de tipos de datos existen dos categorías de conversión.
·         Ensanchamiento o promoción.
·         Estrechamiento o contracción.
Las promociones transforman un dato de un tipo a otro con un espacio de memoria mayor para almacenar información. En estos casos podríamos tener una pérdida de precisión al convertir un valor entero a otro real al desechar algunos dígitos significativos si el número de cifras del valor entero original es muy grande. En la siguiente imagen se puede ver cuáles son las posibles conversiones de promoción.

Las conversiones de contracción son un poco más peliagudas ya que cada vez que hacemos una conversión tenemos una pérdida de datos a menos que el origen cumpla con el máximo del destino.

Todas las conversiones se realizan básicamente de tres modos:
·         Asignación: por conversión implícita cuando se asigna una variable de un tipo a otra de otro tipo.
·         Promoción aritmética: conversión implícita como resultado de una operación aritmética.
·         Por casting o “moldes”: conversión explícita con operadores que producen la conversión entre tipos.
En la siguiente imagen se hace un resumen de las diferentes conversiones que se pueden realizar, podremos observar las conversiones implícitas o automáticas (A) en las que no tenemos que hacer nada para convertir el dato, las conversiones en las que es posible que tengamos perdidas de datos (P) y las conversiones en las que hay que hacer una conversión explícita o “casting” (C).


1 comentarios: (+add yours?)

deltoro05 dijo...

This URL https://unicode-table.com/ has changed to https://symbl.cc/