Test de Rust: 24 preguntas para comprobar lo que sabes

¿Cuánto Rust sabes de verdad? Estas 24 preguntas repasan las 10 lecciones de nuestro curso de Rust: propiedad y préstamos, tipos y conversiones, structs y enums, pattern matching, colecciones e iteradores, errores con Result y el operador ?, traits y genéricos, módulos y concurrencia. Elige una respuesta en cada pregunta y pulsa Corregir al final: verás tu nota, los aciertos por lección y la explicación de cada respuesta.

No hace falta registrarse y nada se envía a ningún sitio: el test se corrige en tu propio navegador. Todas las respuestas con código se comprobaron compilando y ejecutando el código con Rust 1.99.

Pregunta 1Lección 1: Instalación y primer programa

¿Qué es Cargo?

Pregunta 2Lección 1: Instalación y primer programa

¿Por qué println! lleva un signo de exclamación?

Pregunta 3Lección 2: Propiedad y préstamos

¿Qué ocurre al compilar este programa?

fn main() {
    let a = String::from("hola");
    let b = a;
    println!("{a}");
}
Pregunta 4Lección 2: Propiedad y préstamos

¿Cuál es la regla de los préstamos en Rust?

Pregunta 5Lección 2: Propiedad y préstamos

¿Qué imprime este programa?

fn longitud(s: &str) -> usize {
    s.len()
}

fn main() {
    let texto = String::from("hola mundo");
    let n = longitud(&texto);
    println!("{texto} {n}");
}
Pregunta 6Lección 3: Tipos, variables y funciones

¿Qué ocurre al compilar este programa?

fn main() {
    let x = 5;
    x = 6;
    println!("{x}");
}
Pregunta 7Lección 3: Tipos, variables y funciones

¿Qué imprime este programa?

fn main() {
    let grande: u32 = 300;
    let t = grande as u8;
    println!("{t}");
}
Pregunta 8Lección 3: Tipos, variables y funciones

¿Por qué no compila esta función?

fn doble(x: i32) -> i32 {
    x * 2;
}
Pregunta 9Lección 4: Structs y enums

¿Qué imprime este programa?

#[derive(Debug, Clone, Copy, PartialEq)]
struct Punto {
    x: i32,
    y: i32,
}

fn main() {
    let a = Punto { x: 1, y: 2 };
    let b = a;
    println!("{}", a == b);
}
Pregunta 10Lección 4: Structs y enums

En un bloque impl, ¿qué recibe un método declarado con &mut self?

Pregunta 11Lección 5: Pattern matching

¿Qué imprime este programa?

fn main() {
    let esperado = 5;
    let numero = 7;
    match numero {
        esperado => println!("coincide"),
        _ => println!("no coincide"),
    }
}
Pregunta 12Lección 5: Pattern matching

¿Qué pasa si a un match sobre un enum le falta una de sus variantes?

Pregunta 13Lección 6: Colecciones e iteradores

¿Qué imprime este programa?

fn main() {
    let v = vec![1, 2, 3];
    println!("{:?}", v.get(9));
}
Pregunta 14Lección 6: Colecciones e iteradores

¿Qué imprime este programa?

fn main() {
    let v = vec![1, 2, 3];
    let r: Vec<i32> = v.iter().map(|n| n * 10).filter(|n| *n > 10).collect();
    println!("{r:?}");
}
Pregunta 15Lección 6: Colecciones e iteradores

¿Qué ocurre al compilar este programa?

fn main() {
    let v = vec![1, 2, 3];
    for n in v {
        print!("{n} ");
    }
    println!("{v:?}");
}
Pregunta 16Lección 7: Manejo de errores

Dentro de una función que devuelve Result, ¿qué hace el operador ? cuando la operación da Err?

Pregunta 17Lección 7: Manejo de errores

¿Qué ocurre al compilar este programa?

fn main() {
    let n: i32 = "42".parse()?;
    println!("{n}");
}
Pregunta 18Lección 7: Manejo de errores

¿Qué imprime este programa?

fn main() {
    let p: u16 = "abc".parse().unwrap_or(8080);
    println!("{p}");
}
Pregunta 19Lección 8: Traits y genéricos

¿Por qué no compila esta función?

fn mayor<T>(lista: &[T]) -> &T {
    let mut m = &lista[0];
    for x in lista {
        if x > m {
            m = x;
        }
    }
    m
}
Pregunta 20Lección 8: Traits y genéricos

Quieres guardar en un mismo vector un Circulo y un Cuadrado, dos tipos distintos que implementan el trait Figura. ¿Qué tipo usas?

Pregunta 21Lección 9: Módulos y crates

¿Qué ocurre al compilar este programa?

mod tienda {
    pub struct Articulo {
        pub nombre: String,
        precio: f64,
    }
}

fn main() {
    let a = tienda::Articulo { nombre: String::from("tuerca"), precio: 0.5 };
}
Pregunta 22Lección 9: Módulos y crates

¿Para qué sirve cargo check?

Pregunta 23Lección 10: Concurrencia sin miedo

Este programa no compila. ¿Qué hay que añadir para que funcione?

use std::thread;

fn main() {
    let v = vec![1, 2, 3];
    let h = thread::spawn(|| {
        println!("{v:?}");
    });
    h.join().unwrap();
}
Pregunta 24Lección 10: Concurrencia sin miedo

Varios hilos tienen que sumar en el mismo contador. ¿Qué tipo se usa para compartirlo?

Las preguntas siguen el orden del curso. Si fallas alguna, el enlace de su explicación te lleva a la lección donde se explica con ejemplos. Imagen para redes: código en un monitor, foto de Markus Spiske, Wikimedia Commons, CC0.