domingo, 17 de abril de 2016

Tipos e subtipos de Variáveis



Algumas linguagens de programação dividem um pouco mais os “tipos”, tendo caixas diferentes para uma faixa determinada de valores, o que na verdade é corresponde ao quando é “gasto” de memória para guardar o valor (Figura 7).



 Figura 7 – Subtipos de variáveis






Para entender o porquê de todos estes “tipos” precisamos verificar a história da informática, ir ao início dos processos de programação, por volta da década de 1950 e 1960. 

Como vocês sabem o computador trabalha com números binários (0 e 1), os famosos BITs (de BInary DigiT – digito binário), não se preocupe, não vamos ver a matemática ou conversão de binários, mas precisamos de alguns conceitos.

Foi padronizado que a menor forma de guardar e manipular dados seria através de um conjunto de 8 bits, conhecido com Byte. Esta também é a unidade de medida da memória do computador, veja a tabela a baixo:

Valor
Correspondência
 8 Bits
1 Byte
1024 Bytes
1 Kilo Byte ou KByte
1024 KBytes
1 Mega Byte ou MByte
1024 MBytes
1 Guga Byte ou GByte
                 
Nas décadas de 1950 e 1960, a memória dos computadores ficavam na casa dos KBytes (hoje qualquer computador não vem com menos de 1 GByte de memória), logo, o uso deste recurso, caro e limitado, era primordial. 

Mesmo depois com os microcomputadores na década de 1980, ainda tínhamos estes limites, os primeiros microcomputadores tinham 32 KBytes de memória. Mesmo posteriormente com o surgimento dos PCs (Personal Computer – Computadores Pessoais), iniciamos com 256 KBytes, chegando a 640 KBytes, o limite até o início da década de 1990.
                
Logo, cada variável, cada caixa, ocupava uma quantidade específica de memória, “gasta” um número determinado de Bytes, e, portanto, eram utilizadas com economia. 

O programador verificava qual o valor máximo possível para os dados que seriam manipulados, em função do número de Bytes e da forma como os dados seriam guardados, e com isso definia o “tipo” que o valor cabia, ou seja, escolhia o tamanho da caixa necessária, para guardar aquele dado, nunca uma maior, sempre a caixa de tamanho correto.
                 
Por isso muitas linguagens de programação tinham para os “tipos” numéricos, “subtipos” com capacidade diferentes, e consequentemente, diferentes gastos de memória.
                 
Atualmente não temos estes problemas, mesmo quem programa para dispositivos móveis (smartphones, tablets e celulares), possui mais memória para trabalhar do que nas décadas de 1950 a 1980, mas mesmo assim, algumas linguagens ainda possuem “tipos” e “subtipos”. 

Cada “tipo” ou “subtipo”, possui uma forma de ser colocado na memória, além do gasto diferenciado, isso faz com que a linguagem de programação, tenha que saber qual o tipo da caixa (ou variável) para poder lidar com ela.
                 
Vamos entender melhor estas diferenças.
                
Suponha que tivéssemos dois “tipos” de caixas: Cestos e Garrafas, de diferentes tamanhos (capacidades de armazenamento e gastos de memória), onde os Cestos seriam para guardar o “tipo” bolas azuis, e as Garrafas o “tipo” liquido azul (Figura 8).

 Figura 8 – Cestos e Garrafas – meus “tipos” de variáveis




Se tentássemos colocar o “tipo” bolas azuis, que deveriam estar em um Cesto, em uma Garrafa, ou vice-versa, teríamos problemas, pois nossas caixas não estão preparadas para receber os “tipos” de dados que estamos tentando colocar nelas (Figura 09).



Figura 09 – Entre tipos diferentes – não é possível

Da mesma forma, os dados que cabem em um “subtipo” de menor tamanho (as variações dos “tipos”), podem ser guardados em um “subtipo” maior tamanho, ou seja, se enchermos o Cesto Médio, podemos colocar suas bolas azuis em um Cesto Grande, sem problemas. O mesmo ocorre com a Garrafa e o líquido azul (Figura 10).



Figura 10 – Do menor para o maior – é possível
              
Mas se tentarmos o inverso, ou seja, encher o Cesto Grande (ou a Garrafa Grande) e “despejar” seu conteúdo no Cesto Médio (ou a Garrafa Média), eles não vão ter capacidade para estes dados e irão transbordar (Figura 11).


 Figura 11 – Do maior para o menor – não é possível


O que são variáveis?



Onde o computador armazena os dados??

Vamos iniciar nossos estudos com esta pergunta básica. Quando utilizamos um editor de texto ou outro aplicativo qualquer, navegamos na Internet, jogamos, ou qualquer outra coisa que gostamos de fazer, normalmente preenchemos informações ou escrevemos mensagens (Figura 1). Estes dados, onde ficam?



Figura 1 – Utilizando o computador

Não importa se você tem um computador novo ou antigo (Figura 2).
 



Figura 2 – Computadores Novos ou Antigo
                 
Se tem um Notebook (Figura 3).


Figura 3 - Notebook
                 
Ou se utiliza um computador profissional ou servidor de rede (Figura 4).


Figura 4 – Servidores de Rede

         
Todos os dados ficam na MEMÓRIA do computador. Ela é, basicamente, dividida em dois tipos:

·         Memória “permanente”, ou não volátil: os dados são guardados em periféricos de armazenamento como o Disco Rígido (Hard Disk – HD), que o mais comum atualmente.
·         Memória volátil ou RAM: é a memória de execução do computador, os dados aqui são temporários, se eles não forem guardados em um HD, ao ser desligado ou reinicializado o computador, eles são perdidos (por isso o volátil). Também é a memória que o computador utiliza para executar seus aplicativos.
                 
Se você quiser maiores detalhes sobre o computador e seus componentes, pode achar bastante coisa na internet. Recomendamos o livro: Hardware, de Marilene Schiavoni, da Editora Livro Técnico, um livro que esclarece muito, sem entrar nas profundezas da Eletrônica Digital.
                
Agora que sabemos que os dados ficam na Memória, vem a próxima pergunta:

Como podemos utilizar isso em Programação??

Algumas linguagens de programação, como C/C++, permitem que você acesse diretamente a Memória do computador, mas isso exige um conhecimento muito bom do hardware do computador utilizado.

Uma alternativa mais comum e simples para manipularmos dados em programação é utilizando VARIÁVEIS.

E o que vem a ser variáveis?

Tecnicamente é uma forma de “rotular” uma parte, ou pequeno pedaço, da memória, permitindo o uso desta memória, sem conhecer detalhes do hardware.

Mas podemos definir de forma mais genérica, e menos técnica, como uma “caixa” onde guardamos nossos dados, para os utilizarmos depois (Figura 5).

 Figura 5 - Variáveis

Mas, você, que já deve ter dado uma olhadinha em alguma linguagem de programação, mesmo que só por curiosidade, ou está iniciando os estudos, verifica que existem vários “tipos” de variáveis!!! Como isso??

Sim, isso é fato, algumas linguagens de programação possuem uma caixa para cada “tipo” de dados, a grosso modo (Figura 6): números inteiros (1 – 2 – 3 -...- 4...), números reais (1 – 1,1 – 1,2 – 1,234 -...) e letras ou palavras (“a” - “A” - “Avião” -...).

Figura 6 – Tipos de variáveis - caixas