Las funciones son bloques de código reutilizables que realizan una tarea específica. En Rust, las funciones son fundamentales para estructurar y organizar el código. En esta sección, aprenderemos cómo definir y utilizar funciones en Rust.
Definiendo una Función
Para definir una función en Rust, utilizamos la palabra clave fn, seguida del nombre de la función, los parámetros entre paréntesis y el cuerpo de la función entre llaves {}.
Sintaxis Básica
fn nombre_de_la_funcion(parametro1: Tipo, parametro2: Tipo) -> TipoDeRetorno {
// Cuerpo de la función
}Ejemplo Práctico
En este ejemplo:
fn main()define la función principal del programa.fn saludar(nombre: &str)define una función llamadasaludarque toma un parámetronombrede tipo&str(una referencia a una cadena de texto) y no retorna ningún valor.
Explicación del Código
fn: Palabra clave para definir una función.saludar: Nombre de la función.nombre: &str: Parámetro de la función con su tipo.println!("Hola, {}!", nombre);: Línea de código que imprime un saludo en la consola.
Retornando Valores
Las funciones en Rust pueden retornar valores. Para especificar el tipo de retorno, utilizamos una flecha -> seguida del tipo de dato.
Ejemplo Práctico
fn main() {
let resultado = sumar(5, 3);
println!("El resultado es: {}", resultado);
}
fn sumar(a: i32, b: i32) -> i32 {
a + b
}En este ejemplo:
fn sumar(a: i32, b: i32) -> i32define una función que toma dos parámetros de tipoi32y retorna un valor de tipoi32.a + bes la expresión que se evalúa y se retorna como resultado de la función.
Explicación del Código
let resultado = sumar(5, 3);: Llama a la funciónsumarcon los argumentos5y3, y almacena el resultado en la variableresultado.a + b: La expresión que se evalúa y se retorna.
Funciones con Retorno Temprano
Podemos usar la palabra clave return para salir de una función antes de que termine su ejecución.
Ejemplo Práctico
fn main() {
let resultado = dividir(10, 2);
match resultado {
Some(valor) => println!("El resultado es: {}", valor),
None => println!("No se puede dividir por cero"),
}
}
fn dividir(a: i32, b: i32) -> Option<i32> {
if b == 0 {
return None;
}
Some(a / b)
}En este ejemplo:
fn dividir(a: i32, b: i32) -> Option<i32>define una función que retorna unOption<i32>.return None;retornaNonesibes igual a0.Some(a / b)retorna el resultado de la división envuelto enSome.
Explicación del Código
Option<i32>: Tipo de retorno que puede serSome(valor)oNone.if b == 0 { return None; }: Condición que verifica sibes0y retornaNonesi es verdadero.Some(a / b): Retorna el resultado de la división envuelto enSome.
Ejercicios Prácticos
Ejercicio 1: Función de Multiplicación
Escribe una función llamada multiplicar que tome dos parámetros de tipo i32 y retorne su producto.
fn main() {
let resultado = multiplicar(4, 5);
println!("El resultado es: {}", resultado);
}
fn multiplicar(a: i32, b: i32) -> i32 {
// Tu código aquí
}Solución
fn main() {
let resultado = multiplicar(4, 5);
println!("El resultado es: {}", resultado);
}
fn multiplicar(a: i32, b: i32) -> i32 {
a * b
}Ejercicio 2: Función de Factorial
Escribe una función llamada factorial que tome un parámetro de tipo u32 y retorne su factorial.
fn main() {
let resultado = factorial(5);
println!("El factorial de 5 es: {}", resultado);
}
fn factorial(n: u32) -> u32 {
// Tu código aquí
}Solución
fn main() {
let resultado = factorial(5);
println!("El factorial de 5 es: {}", resultado);
}
fn factorial(n: u32) -> u32 {
if n == 0 {
1
} else {
n * factorial(n - 1)
}
}Conclusión
En esta sección, hemos aprendido cómo definir y utilizar funciones en Rust. Hemos cubierto la sintaxis básica, cómo retornar valores y cómo manejar retornos tempranos. Además, hemos practicado con ejercicios para reforzar los conceptos aprendidos. En la siguiente sección, exploraremos el flujo de control en Rust, incluyendo condicionales y bucles.
Curso de Programación en Rust
Módulo 1: Introducción a Rust
- ¿Qué es Rust?
- Configuración del Entorno de Rust
- Programa "Hola, Mundo!"
- Sintaxis y Estructura Básica
