Учебники

Rust — Функции

Функции являются строительными блоками читаемого, обслуживаемого и многократно используемого кода. Функция — это набор операторов для выполнения конкретной задачи. Функции организуют программу в логические блоки кода. После определения функции могут вызываться для доступа к коду. Это делает код многоразовым. Кроме того, функции позволяют легко читать и поддерживать код программы.

Объявление функции сообщает компилятору об имени функции, типе возврата и параметрах. Определение функции обеспечивает фактическое тело функции.

Sr.No Описание функции
1

Определение функции

Определение функции TA определяет, что и как будет выполнена конкретная задача.

2

Вызов или вызов функции

Функция должна быть вызвана для ее выполнения.

3

Возврат Функции

Функции могут также возвращать значение вместе с контролем обратно к вызывающей стороне.

4

Параметризованная функция

Параметры — это механизм для передачи значений в функции.

Определение функции

Определение функции TA определяет, что и как будет выполнена конкретная задача.

Вызов или вызов функции

Функция должна быть вызвана для ее выполнения.

Возврат Функции

Функции могут также возвращать значение вместе с контролем обратно к вызывающей стороне.

Параметризованная функция

Параметры — это механизм для передачи значений в функции.

Определение функции

Определение функции определяет, что и как будет выполнена конкретная задача. Перед использованием функции ее необходимо определить. Тело функции содержит код, который должен быть выполнен функцией. Правила именования функции аналогичны правилам для переменной. Функции определяются с помощью ключевого слова fn . Синтаксис для определения стандартной функции приведен ниже

Синтаксис

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

Объявление функции может содержать параметры / аргументы. Параметры используются для передачи значений в функции.

Пример — простое определение функции

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

Вызов функции

Функция должна быть вызвана для ее выполнения. Этот процесс называется вызовом функции . Значения параметров должны передаваться при вызове функции. Функция, которая вызывает другую функцию, называется функцией вызова.

Синтаксис

function_name(val1,val2,valN)

Пример: вызов функции

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

Здесь main () — это функция вызова.

иллюстрация

В следующем примере определяется функция fn_hello () . Функция выводит сообщение на консоль. Функция main () вызывает функцию fn_hello () .

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

Выход

hello from function fn_hello

Возвращаемое значение из функции

Функции могут также возвращать значение вместе с контролем обратно вызывающей стороне. Такие функции называются возвращающими функциями.

Синтаксис

Любой из следующего синтаксиса может использоваться для определения функции с типом возврата.

С возвратом

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

Сокращенный синтаксис без оператора возврата

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

lllustration

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

Выход

pi value is 3.142857142857143

Функция с параметрами

Параметры — это механизм для передачи значений в функции. Параметры составляют часть сигнатуры функции. Значения параметров передаются функции во время ее вызова. Если явно не указано, количество значений, передаваемых функции, должно соответствовать количеству определенных параметров.

Параметры могут быть переданы в функцию одним из следующих способов:

Передать по значению

Когда метод вызывается, для каждого параметра значения создается новое место хранения. Значения фактических параметров копируются в них. Следовательно, изменения, внесенные в параметр внутри вызванного метода, не влияют на аргумент.

В следующем примере объявляется переменная no, которая изначально равна 5. Переменная передается как параметр (по значению) в функцию mutate_no_to_zero () , которая изменяет значение на ноль. После вызова функции, когда управление возвращается к основному методу, значение будет таким же.

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);
}

Выход

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

Передача по ссылке

Когда вы передаете параметры по ссылке, в отличие от значений параметров, для этих параметров не создается новое место хранения. Эталонные параметры представляют ту же область памяти, что и фактические параметры, которые передаются в метод. Значения параметров могут быть переданы по ссылке путем добавления префикса имени переменной к & .

В приведенном ниже примере у нас есть переменная no , которая изначально равна 5. Ссылка на переменную no передается функции mutate_no_to_zero () . Функция работает с исходной переменной. После вызова функции, когда управление возвращается обратно в метод main, значение исходной переменной будет равно нулю.

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
}

Оператор * используется для доступа к значению, хранящемуся в ячейке памяти, на которую указывает переменная param_no . Это также известно как разыменование.

Выход будет —

The value of no is 0.

Передача строки в функцию

Функция main () передает строковый объект в функцию display () .