Tipos de datos y por qué existen

Enterate del próximo post
Un mail cuando publico algo nuevo. Sin spam y te podés dar de baja cuando quieras.

Un mail cuando publico algo nuevo. Sin spam y te podés dar de baja cuando quieras.
Un ticket de supermercado junta, en una misma hoja, datos que no se parecen entre sí. El nombre de cada producto -pan, leche, detergente- es una palabra o una frase. El precio de cada uno es un número, algo con lo que tiene sentido hacer cuentas para llegar al total. Si un producto está en oferta o no es una respuesta de sí o no, sin ningún término medio posible. Y el ticket entero, con sus diez o veinte líneas, es en sí mismo un dato más: una lista de productos, no un producto suelto.
Estas cuatro clases de dato conviven en la misma hoja de papel, pero ninguna se comporta como las otras. Sumar dos precios da un tercer precio con sentido; sumar dos nombres de producto no da nada reconocible. Esa diferencia -qué operaciones tienen sentido con cada valor- es lo que separa un tipo de dato de otro, y es el tema de este post.
Un tipo de dato es la categoría a la que pertenece un valor, y lo que esa categoría permite hacer con él. No es una etiqueta decorativa: determina qué operaciones son válidas y cuáles no tienen ningún significado, antes incluso de ejecutar el algoritmo.
Esta serie usó, sin nombrarlos todavía, cuatro tipos.
Un número es un valor con el que se puede hacer aritmética: sumar, restar, multiplicar, comparar cuál es mayor. capacidad, lugares_disponibles y temperatura, del post anterior, son números.
Un texto es una secuencia de caracteres tratada como una sola unidad: una palabra, una frase, un párrafo entero. Ya apareció, sin nombrarse, en "aprobado" y "desaprobado" del primer post de la serie: las comillas son justamente lo que marca que eso es un texto y no el nombre de una variable. Un texto no se suma de la misma forma que un número: dos textos se pegan uno detrás del otro, no se aritmetizan.
Un booleano admite solo dos valores posibles: verdadero o falso. También apareció antes sin el nombre: asignar verdadero a hay_luz, del post de variables, es un booleano. Sirve para representar una respuesta de sí o no, un estado que está prendido o apagado, algo que se cumple o no se cumple.
Una colección es distinta de las tres anteriores en un sentido concreto: no guarda un único valor, agrupa varios bajo un mismo nombre. El ticket entero -no una línea suya, sino la lista completa- es una colección. Esta serie todavía no definió ninguna forma concreta de armar una: eso es tema de los próximos posts. Alcanza, por ahora, con reconocerla como una categoría más, tan real como las otras tres.
La razón por la que esta distinción importa es práctica, no académica. Cada tipo habilita ciertas operaciones y deja sin sentido otras. Sumar dos números produce un número mayor. Pegar dos textos produce un texto más largo. Ninguna de las dos operaciones tiene un equivalente razonable en el otro tipo: sumar dos textos no describe ninguna cantidad, y pegar dos números uno detrás del otro no es lo mismo que sumarlos (pegar 12 y 3 da 123, sumarlos da 15). Reconocer el tipo de un dato, antes de operar con él, es lo que evita construir un paso que no significa nada.
El siguiente algoritmo arma el total de una compra, sumando el precio de tres productos.
algoritmo total_ticket(precio_1, precio_2, precio_3):
asignar precio_1 a total
sumar precio_2 a total
sumar precio_3 a total
devolver totalCon precios de 850, 1200 y 430: el total pasa por 850, 2050 y termina en 2480. Los tres datos de entrada son números, y la única operación que hace falta es la que ya usaron los posts anteriores: sumar.
El texto tiene su propia operación natural, y no es sumar. El siguiente algoritmo arma el nombre completo de un producto pegando la marca y el nombre en un solo texto.
algoritmo nombre_completo_producto(marca, nombre):
unir marca y nombre
devolver el resultadounir toma dos o más textos y los pega uno después del otro, sin hacer ninguna cuenta con ellos. Con marca en "La Serenísima" y nombre en "leche entera", el resultado es "La Serenísima leche entera": un texto más largo, formado por los dos textos originales uno al lado del otro, en el mismo orden en que se los pasó. Así como sumar es la operación que le da sentido a un número, unir es la que le da sentido a un texto.
Una entrada de cine registra tres datos: el nombre de la película, el precio base de la entrada, y un cargo fijo de servicio que se suma al final. Escribir el algoritmo que calcula el precio final que paga la persona.
Pista: el nombre de la película es un dato real de la entrada, pero no es un número, y este cálculo en particular no lo necesita para nada. Antes de escribir el primer paso, conviene separar qué datos son números -con los que se puede operar- de los que no lo son.
algoritmo precio_final_entrada(nombre_pelicula, precio_base, cargo_servicio):
sumar cargo_servicio a precio_base
devolver precio_basenombre_pelicula se recibe como dato de entrada y no vuelve a aparecer en ningún paso siguiente: es un texto, y el cálculo del precio final es un asunto exclusivamente numérico. Un algoritmo puede recibir más datos de los que necesita para un cálculo puntual; que un dato esté disponible no obliga a usarlo.
Una etiqueta de estantería muestra el nombre del producto seguido de su precio, con el símbolo de moneda entre los dos: por ejemplo, "Café - $2300". Escribir el algoritmo que arma esa etiqueta a partir del nombre del producto y su precio.
Pista: el precio es un número, pero en la etiqueta final aparece como parte de un texto, pegado junto con el nombre del producto y el símbolo de moneda. Conviene pensar cuál de las dos operaciones vistas en este post junta cosas en una sola pieza de texto, aunque uno de esos datos no sea todavía un texto.
algoritmo etiqueta_precio(nombre_producto, precio):
unir nombre_producto, " - $" y precio
devolver el resultadoCon nombre_producto en "Café" y precio en 2300, el resultado es "Café - $2300". unir recibió un texto, otro texto y un número, y los tres terminaron pegados en una sola pieza: para eso, el número se convierte primero a su representación como texto -los mismos dígitos, ahora tratados como caracteres y no como una cantidad-. unir sigue siendo la operación del texto, no una operación nueva para números: lo que cambió es que uno de sus tres datos de entrada llegó de otro tipo, y tuvo que adaptarse antes de poder pegarse.
Un tipo de dato es la categoría de un valor, y esa categoría es la que determina qué operaciones tienen sentido con él: los números se suman, restan y comparan; los textos se unen; los booleanos solo valen verdadero o falso; las colecciones agrupan varios valores bajo un mismo nombre. Ignorar el tipo de un dato no produce un error de sintaxis: produce un paso que, aunque se ejecute, no significa nada.
Con los tres tipos de valor único ya nombrados, falta la colección: un dato que no guarda un solo valor sino muchos, y que necesita su propia forma de armarse y de recorrerse. El próximo paso de la serie entra de lleno en la primera forma concreta de una colección: una lista de valores, uno detrás del otro.