1.2 Los nombres de las cosas
Esta traducción fue asistida por IA y revisada superficialmente. Si encuentras errores o algo no suena natural, escríbeme — lo agradezco.
Cada cosa tiene una naturaleza - y la naturaleza no pide permiso. Un número sigue siendo un número, una cadena sigue siendo una cadena, e intentar sumarlos no lleva a ningún buen lugar, por convincente que parezca sobre el papel. El compilador lo sabe de antemano. Ese es, precisamente, su trabajo.
Lo que necesitas
El struct Task tiene tres campos con tres tipos. En el capítulo anterior se aceptaron sin
explicación. Era la decisión correcta entonces - y sería una mala idea dejarlo así para
siempre.
El material
u64 - un entero sin signo.
u significa sin signo: solo cero y números positivos. 64 es el ancho en bits: hasta
dieciocho trillones y algo más. Un ID de tarea negativo no tiene sentido - u64 lo hace
imposible. Agotar el rango tampoco es motivo de preocupación.
bool - un valor booleano.
true o false. El estado de una tarea tiene exactamente dos estados - bool los expresa
con precisión, sin nada sobrante. En el capítulo 1.4, status obtendrá una representación
más rica; por ahora, bool es suficiente.
String - una cadena.
Una cadena que el programa crea en tiempo de ejecución, en lugar de tomarse ya hecha del
código fuente. String::from("Buy coffee") la crea a partir de un literal de texto.
Inferencia de tipos.
En la definición de un struct, los tipos deben escribirse explícitamente: sin ellos, el
compilador no sabe qué forma construir. Pero en otros lugares puede deducirlos por sí solo.
Esto ya ocurre en main.rs:
let task = Task {
id: 1,
title: String::from("Buy coffee"),
status: false,
};
En ningún lugar aparece let task: Task = .... El compilador ve el lado derecho y determina
el tipo por sí mismo. Escribirlo donde es obvio es trabajo extra que Rust no exige.
El resultado
La tarea no ha cambiado. Pero ahora el aprendiz sabe de qué está hecha. El compilador lo sabía desde el principio.
El código completo de
tqpara este capítulo está en1-a-task/02-the-names-of-things/.
Lore: Tipos enteros
Rust tiene varios tipos enteros. El patrón es consistente: i significa con signo (puede
ser negativo), u significa sin signo, el número es el ancho en bits.
| Tipo | Rango |
|---|---|
i32 | -2.147.483.648 … 2.147.483.647 |
u32 | 0 … 4.294.967.295 |
i64 | -9,2 × 10¹⁸ … 9,2 × 10¹⁸ |
u64 | 0 … 1,8 × 10¹⁹ |
Cuando no se especifica ningún tipo y el contexto no ayuda, Rust usa i32 por defecto -
suficientemente grande para la mayoría de usos y rápido en cualquier plataforma moderna.