Les funcions són una part fonamental de qualsevol llenguatge de programació, i Rust no és una excepció. En aquest tema, aprendrem com definir i utilitzar funcions en Rust, així com alguns conceptes avançats relacionats amb les funcions.
Continguts
Definició de Funcions
En Rust, les funcions es defineixen amb la paraula clau fn
, seguida del nom de la funció, els paràmetres entre parèntesis i el cos de la funció entre claus.
Exemple
En aquest exemple, hem definit una funció anomenada saluda
que imprimeix "Hola, món!" a la consola. Després, hem cridat aquesta funció des de la funció main
.
Paràmetres i Tipus de Retorn
Les funcions poden acceptar paràmetres i retornar valors. Els paràmetres es defineixen dins dels parèntesis després del nom de la funció, i el tipus de retorn es defineix després d'una fletxa (->
).
Exemple amb Paràmetres
Exemple amb Tipus de Retorn
fn suma(a: i32, b: i32) -> i32 { a + b } fn main() { let resultat = suma(5, 3); println!("El resultat és: {}", resultat); }
En aquest exemple, la funció suma
accepta dos paràmetres de tipus i32
i retorna un valor de tipus i32
.
Expressions i Sentències
En Rust, les funcions poden contenir expressions i sentències. Una expressió retorna un valor, mentre que una sentència no ho fa.
Exemple d'Expressió
Exemple de Sentència
fn imprimeix_suma(a: i32, b: i32) { let resultat = a + b; // Aquesta és una sentència println!("El resultat és: {}", resultat); }
Funcions Anònimes (Closures)
Les closures són funcions anònimes que poden capturar variables del seu entorn. Es defineixen amb pipes (|
) per als paràmetres i una fletxa (->
) per al tipus de retorn opcional.
Exemple de Closure
fn main() { let suma = |a: i32, b: i32| -> i32 { a + b }; let resultat = suma(5, 3); println!("El resultat és: {}", resultat); }
Exercicis Pràctics
Exercici 1: Funció de Multiplicació
Defineix una funció anomenada multiplica
que accepti dos paràmetres de tipus i32
i retorni el seu producte.
fn multiplica(a: i32, b: i32) -> i32 { // Implementa la funció aquí } fn main() { let resultat = multiplica(4, 5); println!("El resultat és: {}", resultat); // Ha de imprimir "El resultat és: 20" }
Solució
fn multiplica(a: i32, b: i32) -> i32 { a * b } fn main() { let resultat = multiplica(4, 5); println!("El resultat és: {}", resultat); // Ha de imprimir "El resultat és: 20" }
Exercici 2: Funció de Salutació Personalitzada
Defineix una funció anomenada saluda_personalitzat
que accepti un paràmetre de tipus &str
i imprimeixi un missatge de salutació personalitzat.
fn saluda_personalitzat(nom: &str) { // Implementa la funció aquí } fn main() { saluda_personalitzat("Joan"); // Ha de imprimir "Hola, Joan!" }
Solució
fn saluda_personalitzat(nom: &str) { println!("Hola, {}!", nom); } fn main() { saluda_personalitzat("Joan"); // Ha de imprimir "Hola, Joan!" }
Conclusió
En aquesta secció, hem après com definir i utilitzar funcions en Rust, incloent-hi paràmetres, tipus de retorn, expressions, sentències i closures. Les funcions són una eina poderosa per organitzar i reutilitzar el codi, i comprendre-les és essencial per a qualsevol programador de Rust. En el següent mòdul, explorarem el flux de control, incloent-hi condicions i bucles.