Rust - Funzioni

Le funzioni sono gli elementi costitutivi del codice leggibile, gestibile e riutilizzabile. Una funzione è un insieme di istruzioni per eseguire un'attività specifica. Le funzioni organizzano il programma in blocchi logici di codice. Una volta definite, le funzioni possono essere chiamate per accedere al codice. Ciò rende il codice riutilizzabile. Inoltre, le funzioni facilitano la lettura e la manutenzione del codice del programma.

Una dichiarazione di funzione indica al compilatore il nome, il tipo restituito ei parametri di una funzione. Una definizione di funzione fornisce il corpo effettivo della funzione.

Suor n Descrizione della funzione
1

Defining a function

La definizione della funzione TA specifica cosa e come verrà eseguita un'attività specifica.

2

Calling or invoking a Function

Una funzione deve essere chiamata in modo da eseguirla.

3

Returning Functions

Le funzioni possono anche restituire valore insieme al controllo, al chiamante.

4

Parameterized Function

I parametri sono un meccanismo per passare valori alle funzioni.

Definizione di una funzione

Una definizione di funzione specifica cosa e come verrà eseguita un'attività specifica. Prima di utilizzare una funzione, è necessario definirla. Il corpo della funzione contiene codice che dovrebbe essere eseguito dalla funzione. Le regole per denominare una funzione sono simili a quelle di una variabile. Le funzioni vengono definite utilizzandofnparola chiave. Di seguito viene fornita la sintassi per la definizione di una funzione standard

Sintassi

fn function_name(param1,param2..paramN) {
   // function body
}

Una dichiarazione di funzione può facoltativamente contenere parametri / argomenti. I parametri vengono utilizzati per passare valori alle funzioni.

Esempio: definizione di funzione semplice

//Defining a function
fn fn_hello(){
   println!("hello from function fn_hello ");
}

Invocare una funzione

Una funzione deve essere chiamata in modo da eseguirla. Questo processo è definito comefunction invocation. I valori per i parametri devono essere passati quando viene richiamata una funzione. La funzione che richiama un'altra funzione è chiamatacaller function.

Sintassi

function_name(val1,val2,valN)

Esempio: invocare una funzione

fn main(){
   //calling a function
   fn_hello();
}

Qui, main () è la funzione chiamante.

Illustrazione

L'esempio seguente definisce una funzione fn_hello(). La funzione stampa un messaggio alla console. Ilmain()funzione invoca la funzione fn_hello () .

fn main(){
   //calling a function
   fn_hello();
}
//Defining a function
fn fn_hello(){
   println!("hello from function fn_hello ");
}

Produzione

hello from function fn_hello

Restituzione di valore da una funzione

Le funzioni possono anche restituire un valore insieme al controllo al chiamante. Tali funzioni sono chiamate funzioni di ritorno.

Sintassi

È possibile utilizzare una delle seguenti sintassi per definire una funzione con tipo restituito.

Con dichiarazione di ritorno

// Syntax1
fn function_name() -> return_type {
   //statements
   return value;
}

Sintassi abbreviata senza dichiarazione di ritorno

//Syntax2
fn function_name() -> return_type {
   value //no semicolon means this value is returned
}

illustrazione

fn main(){
   println!("pi value is {}",get_pi());
}
fn get_pi()->f64 {
   22.0/7.0
}

Produzione

pi value is 3.142857142857143

Funzione con parametri

I parametri sono un meccanismo per passare valori alle funzioni. I parametri fanno parte della firma della funzione. I valori dei parametri vengono passati alla funzione durante la sua chiamata. Se non diversamente specificato, il numero di valori passati a una funzione deve corrispondere al numero di parametri definiti.

I parametri possono essere passati a una funzione utilizzando una delle seguenti tecniche:

Passa per valore

Quando viene richiamato un metodo, viene creata una nuova posizione di archiviazione per ogni parametro del valore. I valori dei parametri effettivi vengono copiati in essi. Quindi, le modifiche apportate al parametro all'interno del metodo invocato non hanno effetto sull'argomento.

L'esempio seguente dichiara una variabile no, che inizialmente è 5. La variabile viene passata come parametro (per valore) al mutate_no_to_zero()functionnction, che cambia il valore a zero. Dopo la chiamata alla funzione, quando il controllo ritorna al metodo principale, il valore sarà lo stesso.

fn main(){
   let no:i32 = 5;
   mutate_no_to_zero(no);
   println!("The value of no is:{}",no);
}

fn mutate_no_to_zero(mut param_no: i32) {
   param_no = param_no*0;
   println!("param_no value is :{}",param_no);
}

Produzione

param_no value is :0
The value of no is:5

Passa per riferimento

Quando si passano i parametri per riferimento, a differenza dei parametri valore, non viene creata una nuova posizione di archiviazione per questi parametri. I parametri di riferimento rappresentano la stessa posizione di memoria dei parametri effettivi forniti al metodo. I valori dei parametri possono essere passati per riferimento anteponendo al nome della variabile un prefisso& .

Nell'esempio riportato di seguito, abbiamo una variabile no , che inizialmente è 5. Un riferimento alla variabile no viene passato amutate_no_to_zero()funzione. La funzione opera sulla variabile originale. Dopo la chiamata alla funzione, quando il controllo ritorna al metodo principale, il valore della variabile originale sarà zero.

fn main() {
   let mut no:i32 = 5;
   mutate_no_to_zero(&mut no);
   println!("The value of no is:{}",no);
}
fn mutate_no_to_zero(param_no:&mut i32){
   *param_no = 0; //de reference
}

L'operatore * viene utilizzato per accedere al valore memorizzato nella posizione di memoria che la variabile param_nopunta a. Questo è noto anche come dereferenziazione.

L'output sarà:

The value of no is 0.

Passaggio di una stringa a una funzione

La funzione main () passa un oggetto stringa alla funzione display () .

fn main(){
   let name:String = String::from("TutorialsPoint");
   display(name); 
   //cannot access name after display
}
fn display(param_name:String){
   println!("param_name value is :{}",param_name);
}

Produzione

param_name value is :TutorialsPoint