Fundamentos del lenguaje
39 pasos en 8 series de Rust.
Rust antes de las partes difíciles. Variables, el sistema de tipos, valores compuestos, control de flujo, funciones, texto y las colecciones que más vas a usar. La coincidencia de patrones tiene su propia serie porque match no es una sentencia switch, y tratarlo como si lo fuera desperdicia lo mejor que tiene el lenguaje.
Treinta y nueve pasos, y nada te pelea todavía. La propiedad (ownership) es el siguiente tour, y ahí sí.
Variables y tipos
- Variables y mutabilidadLas vinculaciones son inmutables por defecto; mut activa el cambio.
- Shadowing y constantesReutilizar un nombre con
let, y constantes de tiempo de compilación. - Tipos escalares y castsLos enteros con tamaño, floats, bools y chars de Rust.
- Desbordamiento de enterosRust no deja pasar un desbordamiento: eliges el comportamiento de forma explícita.
- Floats y castsMatemática de punto flotante, y los casts explícitos que Rust exige entre tipos.
- Caracteres y bytesUn char es un escalar Unicode; los bytes son otra cosa, y Rust los mantiene aparte.
Valores compuestos
- TuplasGrupos de tamaño fijo con tipos mezclados.
- ArreglosLos arreglos de tamaño fijo viven en la pila y llevan su longitud en el tipo.
- Structs de tupla y unitariosStructs sin nombres de campo: newtypes para el significado, structs unitarios como marcadores.
- DesestructuraciónLos patrones desarman structs, tuplas y valores anidados en una sola vinculación.
Control de flujo
- if / else if / elseRamificación donde cada rama es una expresión.
- BuclesLas tres formas de bucle en Rust: for, while y loop.
- RangosLos rangos son valores: puedes iterarlos, invertirlos y recorrerlos por pasos.
- Bucles que devuelven valoresloop es una expresión: break saca un valor, y las etiquetas eligen qué bucle dejar.
- while letwhile let sigue iterando mientras el patrón coincida — vaciar una pila, por ejemplo.
- let elselet else vincula en el camino feliz y obliga a la rama de falla a divergir.
- Todo es una expresiónBloques, ifs y matches evalúan a un valor; por eso Rust necesita pocas sentencias.
- FizzBuzzEl clásico ejercicio de entrevista, escrito con match en vez de if.
Coincidencia de patrones
- Expresiones matchCoincidencia de patrones exhaustiva sobre un valor.
- Enum con matchUn enum con datos en sus variantes, cubierto con un match exhaustivo.
- Guards y vinculaciones en matchUn guard agrega una condición a una rama; @ conserva el valor que coincidió.
- Patrones de sliceCoincidir con la forma de un slice: vacío, un elemento, primero y último, el medio.
Funciones
- FuncionesDefinir, componer y pasar funciones.
- MCDEl algoritmo de Euclides, todavía la respuesta correcta más corta después de dos mil años.
- Fibonacci iterativoFibonacci sin recursión, y un primer vistazo al shadowing.
- Constantes y alias de tipoConstantes de compilación, statics que viven todo el programa y nombres para tipos largos.
Texto
- Cadenas de formatoEl minilenguaje de formato: ancho, precisión, alineación, salida de depuración.
- Parsear textoConvertir cadenas en números, y decidir qué significa una falla.
- Construir cadenasHacer crecer un String, unir piezas y las formas baratas de cortar texto.
Colecciones
- VectoresEl Vec redimensionable y sus métodos de todos los días.
- Trabajar un VecLos métodos de Vec que hacen trabajo real: filtrar en el lugar, ordenar por clave, ventanas.
- Ordenar y buscarOrdenar con un comparador, hallar extremos y buscar en un slice ordenado.
- Búsqueda binariaReduce el rango a la mitad en cada paso, con la aritmética de índices que el borrow checker acepta.
- La API entryUna búsqueda en vez de dos: entry te da la casilla, ocupada o no.
- HashSetPertenencia y álgebra de conjuntos, sin valores duplicados por construcción.
- BTreeMapUn mapa ordenado: la iteración sigue las claves, y puedes pedir un rango.
- VecDequeUn buffer circular: push y pop en ambos extremos en tiempo constante.