Introducción
Una función asigna un nombre a una tarea para que un programa pueda ejecutarla siempre que sea necesario. Las funciones pueden recibir datos de entrada mediante parámetros y devolver un valor calculado.
En este laboratorio, un proyecto de Cargo preparado ya contiene tres funciones de conversión y todas sus llamadas. En cada paso, sustituirá una expresión de marcador de posición. Así, escribirá poco código y verá cómo se relacionan las definiciones de funciones, los parámetros, los tipos de retorno, las expresiones y las llamadas.
Devolver un valor desde una función
En este paso, completará una función que convierte minutos en segundos y relacionará su definición con la llamada correspondiente.
Acceda al proyecto preparado y abra su archivo de código fuente:
cd /home/labex/project/conversion-tool
nano src/main.rs
Al principio del archivo, esta línea inicia una definición de función:
fn minutes_to_seconds(minutes: i32) -> i32 {
fnintroduce una función.minutes_to_secondses el nombre de la función.minutes: i32es un parámetro: una entrada llamadaminutescuyo tipo es el enteroi32.-> i32indica que la función devuelve un valori32.- Las llaves contienen el cuerpo de la función.
Rust comprueba cada llamada comparándola con esta firma. La persona que realiza la llamada debe proporcionar el número esperado de argumentos, en el orden declarado, y cada argumento debe tener un tipo compatible.
Sustituya únicamente el 0 que aparece antes del comentario de Step 1 por:
minutes * 60 // Step 1: replace this placeholder expression.
Observe que minutes * 60 no tiene punto y coma. Es la expresión final del cuerpo de la función, por lo que su valor se convierte en el valor de retorno de la función. Si añade un punto y coma, la convertirá en una sentencia que no devuelve este valor.
Guarde el archivo con Ctrl+O, pulse Enter y salga con Ctrl+X. Compruebe el código:
cargo check
En main, minutes_to_seconds(5) es una llamada a una función. El valor 5 es el argumento que se proporciona al parámetro minutes. Ejecute el programa:
cargo run --quiet
La primera línea debería ser ahora:
5 minutes = 300 seconds
Usar un parámetro y un tipo de retorno decimal
En este paso, completará una segunda función que acepta y devuelve valores de coma flotante.
Abra el archivo de código fuente:
nano src/main.rs
Busque celsius_to_fahrenheit. Tanto su parámetro como su tipo de retorno son f64, por lo que el cálculo puede conservar un resultado fraccionario. La expresión temporal celsius * 0.0 utiliza el parámetro, pero devuelve deliberadamente cero. Sustituya la expresión completa por:
celsius * 9.0 / 5.0 + 32.0 // Step 2: replace this placeholder expression.
Este es otro retorno mediante una expresión: el valor calculado es el último elemento del cuerpo de la función y no tiene punto y coma. La multiplicación y la división se evalúan antes que la suma, de acuerdo con la precedencia aritmética habitual. Los paréntesis permiten hacer explícito un orden de evaluación más complejo. La persona que realiza la llamada no necesita conocer la fórmula: proporciona un argumento en grados Celsius y recibe el valor devuelto en grados Fahrenheit.
Guarde el archivo, salga del editor y ejecute el programa:
cargo run --quiet
La segunda línea debería ser:
20.0 C = 68.0 F
La llamada celsius_to_fahrenheit(20.0) pasa un argumento. El valor devuelto se almacena en la variable fahrenheit antes de darle formato para mostrarlo.
Reutilizar una función con varios argumentos
En este paso, completará una función con dos parámetros y observará cómo se reutiliza en dos llamadas.
La función preparada scale_amount recibe amount y factor. Los parámetros se separan mediante comas y cada uno tiene su propio tipo. Una llamada debe proporcionar los argumentos en el mismo orden.
Abra el archivo y busque el marcador de posición de Step 3:
nano src/main.rs
La expresión temporal amount * factor * 0.0 devuelve deliberadamente cero. Sustituya la expresión completa por:
amount * factor // Step 3: replace this placeholder expression.
Guarde el archivo y salga del editor. Después, realice una comprobación final:
cargo check
Ejecute el programa completado:
cargo run --quiet
La misma función se llama una vez para la harina y otra vez para el agua. Las dos últimas líneas deberían ser:
Scaled flour: 375.0 g
Scaled water: 270.0 ml
Esta es la principal ventaja de una función: el cálculo se define una sola vez, recibe un nombre claro y se reutiliza con distintos argumentos.
Resumen
Ha completado funciones con parámetros enteros y de coma flotante, ha interpretado las flechas de los tipos de retorno, ha devuelto valores mediante expresiones finales, ha pasado argumentos en llamadas a funciones y ha reutilizado una función para realizar varios cálculos.



