Lección 2

Expresiones y funciones

Distingue una expresión de una sentencia, tipa parámetros y elige entre expresión final y return explícito.

Nivel
Inicial
Duración
20 min
Actualizada

Todo vale algo, hasta que le pones un punto y coma

En «Variables, funciones y control de flujo» ya llamaste a una función, boost(), sin nombrar por qué su última línea no llevaba ;. Aquí formalizamos eso: qué es una expresión, qué es una sentencia, y por qué esa diferencia decide si tu función compila o no.

Rust construye casi todo a partir de expresiones: un bloque {}, un if, una llamada a función, todos producen un valor. Una sentencia, en cambio, no produce nada útil. Saber en cuál de los dos casos estás es la base para leer —y escribir— cualquier función Rust con confianza.

Verás cuatro estaciones: funciones y llamadas, parámetros tipados, expresiones frente a sentencias, y las dos formas de devolver un valor.

Estado de la función

  • ENTRADA · llamada6 llega como n
  • CUERPO · squareexpresión final sin ;
  • SALIDA · retornovuelve al punto de la llamada
01 / 04FN · LLAMADA · RESULTADO

Ejercicio 01 · Fibonacci

Calcula el n-ésimo término de Fibonacci de forma iterativa.

El starter ya declara la firma con el tipo de retorno correcto. Completa el cuerpo con un bucle que avance dos acumuladores en cada vuelta.

0/1correcta

Completa fibonacci para que devuelva el n-ésimo término de la sucesión (0-indexado: fibonacci(0) == 0).

01

Implementa

Sustituye `todo!` por un bucle `for` que actualice dos variables en cada vuelta.

Función 01

Calcular Fibonacci iterativamente

Sin cambios

Usa dos variables mutables que avanzan una posición en cada vuelta del bucle y devuelve la primera al terminar.

/// Returns the n-th Fibonacci number (0-indexed: fibonacci(0) == 0).
pub fn fibonacci(n: u32) -> u64 {
    todo!("iterate n times, swapping a and b to compute the n-th Fibonacci number")
}
02

Comprueba

Ejecuta los casos visibles y usa el diagnóstico para corregir el código.

produce los primeros términos y el décimo término correctos
Compilador

Modifica el código antes de ejecutar las pruebas.

03

Ayuda

Consulta pistas progresivas o compara con la solución.

Ejecuta un intento para desbloquear la solución.

Resumen

  • fn declara una función; llamarla ejecuta su cuerpo, definirla no.
  • Cada parámetro tiene su propio tipo; junto con el tipo de retorno forman la firma de la función.
  • Una expresión produce un valor; un ; de más la convierte en una sentencia que vale ().
  • Un error E0308 con expected T, found () casi siempre significa un ; sobrante en la expresión final.
  • La expresión final de una función es su retorno implícito; return sirve para salidas anticipadas.
  • El tipo unidad () no ocupa memoria: es el valor por defecto cuando una función no devuelve nada útil.

Fuentes