Resumo
Um programa imperativo não calcula seu resultado de uma vez: constrói-o por passos, guardando valores intermediários e alterando-os. Esta aula estuda o lugar onde eles são guardados, a variável, que é uma posição de memória com um nome, um tipo e um valor. Ensina a declará-la e inicializá-la com chaves, e por que as chaves são a forma preferida; a alterar seu valor por atribuição, cujo sinal = não significa o que significa na matemática; a acompanhar o estado de um programa, isto é, o valor de todas as suas variáveis em cada instante, com uma tabela de rastreamento; a escolher nomes que digam o que a variável guarda, e a evitar o erro mais silencioso desta etapa: ler uma variável à qual nunca se deu valor, o que em C++ é comportamento indefinido.
Objetivos de aprendizagem
- Declarar e inicializar variáveis com chaves, e distinguir a inicialização da atribuição em um programa dado.
- Rastrear à mão o estado de um programa de atribuições sucessivas com uma tabela de rastreamento, e prever assim sua saída.
- Escolher nomes em inglês que digam o que cada variável guarda, segundo as regras da linguagem e o guia do curso.
- Explicar por que ler uma variável não inicializada é comportamento indefinido, reconhecê-lo em um programa e preveni-lo inicializando sempre.
A variável como posição de memória
Na aula Do problema ao algoritmo os algoritmos foram escritos com letras como e , que recebiam um valor e depois outro: “ recebe o valor ”. Na matemática, uma letra designa um valor fixo, embora desconhecido; em um algoritmo, ao contrário, designa um lugar cujo conteúdo muda. Um programa em C++ precisa do mesmo, e o obtém da memória do computador.
A memória principal é uma longa sucessão de bytes, cada um com seu número de ordem, seu endereço. Uma variável é um trecho dessa memória ao qual o programa dá um nome e um tipo. Tem, portanto, quatro atributos:
- um nome, com o qual o programa a designa (
count,price); - um tipo, que fixa que valores ela pode guardar, quantos bytes ocupa e que operações admite:
intguarda números inteiros,doublenúmeros com casas decimais; - um valor, o que ela guarda em um instante dado, que pode mudar enquanto o programa é executado;
- um lugar na memória, que o compilador e o sistema escolhem e que o programa quase nunca precisa conhecer.
A imagem que convém reter é a de uma caixa: o nome escrito em cima, o valor dentro. O tipo é o tamanho e a forma da caixa; uma caixa de int não admite 2.5, assim como um escaninho de cartas não admite um pacote. As figuras desta aula desenham assim o estado de um programa, e o redesenham depois de cada instrução.
Que o tipo fixa o tamanho pode ser visto: o operador sizeof dá o número de bytes que uma variável ou um tipo ocupa.
#include <print>int main(){ const int count{12}; const double price{4.5}; std::println("count ocupa {} bytes", sizeof(count)); std::println("price ocupa {} bytes", sizeof(price));}count ocupa 4 bytesprice ocupa 8 bytesUm int ocupa aqui 4 bytes, e um double, 8. Esses números não são os mesmos em todos os sistemas, e deles depende quantos valores distintos cabem em cada tipo; as aulas Os inteiros e sua representação e Os números de ponto flutuante vão estudá-lo. Aqui basta o essencial: o tipo de uma variável é fixado ao declará-la e não muda nunca; o que muda é seu valor.
Carregando o conteúdo…