Saltar al contenido
Topos Uranos

Resumen

Un programa imperativo no calcula de una vez su resultado: lo construye por pasos, guardando valores intermedios y cambiándolos. Esta clase estudia el lugar donde se guardan, la variable, que es una casilla de memoria con un nombre, un tipo y un valor. Enseña a declararla e inicializarla con llaves, y por qué las llaves son la forma preferida; a cambiar su valor por asignación, cuyo signo = no significa lo que significa en la matemática; a seguir el estado de un programa, es decir, el valor de todas sus variables en cada instante, con una tabla de traza; a elegir nombres que digan lo que la variable guarda, y a evitar el error más silencioso de esta etapa: leer una variable a la que nunca se dio valor, que en C++ es comportamiento indefinido.

Objetivos de aprendizaje

  1. Declarar e inicializar variables con llaves, y distinguir la inicialización de la asignación en un programa dado.
  2. Seguir a mano el estado de un programa de asignaciones sucesivas con una tabla de traza, y predecir así su salida.
  3. Elegir nombres en inglés que digan lo que cada variable guarda, según las reglas del lenguaje y la guía del curso.
  4. Explicar por qué leer una variable sin inicializar es comportamiento indefinido, reconocerlo en un programa y prevenirlo inicializando siempre.

La variable como casilla

En la clase Del problema al algoritmo los algoritmos se escribieron con letras como qq y rr, que tomaban un valor y después otro: «rr toma el valor r−br - b». En la matemática, una letra designa un valor fijo, aunque desconocido; en un algoritmo, en cambio, designa un lugar cuyo contenido cambia. Un programa de C++ necesita lo mismo, y lo obtiene de la memoria del computador.

La memoria principal es una larga sucesión de bytes, cada uno con su número de orden, su dirección. Una variable es un trozo de esa memoria al que el programa da un nombre y un tipo. Tiene, por tanto, cuatro atributos:

  1. un nombre, con el que el programa la designa (count, price);
  2. un tipo, que fija qué valores puede guardar, cuántos bytes ocupa y qué operaciones admite: int guarda números enteros, double números con decimales;
  3. un valor, el que guarda en un instante dado, que puede cambiar mientras el programa se ejecuta;
  4. un lugar en la memoria, que el compilador y el sistema eligen y que el programa casi nunca necesita conocer.

La imagen que conviene retener es la de una casilla: el nombre escrito arriba, el valor dentro. El tipo es el tamaño y la forma de la casilla; una casilla de int no admite 2.5, como un casillero de cartas no admite un paquete. Las figuras de esta clase dibujan así el estado de un programa, y lo redibujan después de cada sentencia.

Que el tipo fija el tamaño puede verse: el operador sizeof da el número de bytes que ocupa una variable o un tipo.

Programa en C++
#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));}
Salida
count ocupa 4 bytesprice ocupa 8 bytes

Un int ocupa aquí 4 bytes, y un double, 8. Esas cifras no son las mismas en todos los sistemas, y de ellas depende cuántos valores distintos caben en cada tipo; las clases Los enteros y su representación y Los números de coma flotante lo estudiarán. Aquí basta lo esencial: el tipo de una variable se fija al declararla y no cambia nunca; lo que cambia es su valor.