Funkcje Rust mają wiele niuansów, które różnią się od innych języków. Dowiedz się wszystkiego o ich składni tutaj.

Funkcje są podstawowymi konstrukcjami programistycznymi, ponieważ stanowią podstawę wielokrotnego użytku kodu i ułatwiają programowanie modułowe. Funkcje to samodzielne bloki kodu, które wykonują określone zadania. Mogą otrzymywać dane wejściowe w postaci argumentów i zwracać wartość.

Rust zapewnia funkcje organizacji kodu, enkapsulacji i ponownego wykorzystania kodu.

Definiowanie funkcji w Rust

Funkcje rdzy są bardzo podobne funkcje w każdym innym języku programowania, chociaż istnieją niewielkie różnice, które musisz zrozumieć.

Funkcje dla swoich programów w języku Rust zdefiniujesz za pomocą przyp słowo kluczowe, po którym następuje nazwa funkcji, opcjonalne argumenty i opcjonalny powrót typ danych.

// funkcja, która nie przyjmuje argumentów ani nie zwraca wartości
fn nazwa_funkcji() {
// ciało funkcji tutaj
}

Oto prosta funkcja Rusta, która nie przyjmuje żadnych argumentów ani nie zwraca żadnych wartości.

instagram viewer
fn a_funkcja(){
niech x = 3;
println!("{}", X)
}

funkcja jest prostą funkcją Rusta, która wyświetla zmienną X.

Podpisy funkcji rdzy

Sygnatury funkcji to sposób nazywania funkcji i opisywania ich argumentów oraz zwracanych typów, bez dołączania treści funkcji. Sygnatury funkcji są przydatne do dokumentowania interfejsów API bibliotek Rusta.

Oto przykładowa sygnatura funkcji Rusta:

fn nazwa()

fn pozdrawiam (nazwa: &str)

The nazwa function jest minimalną sygnaturą funkcji, podczas gdy powitać podpis określa, że ​​funkcja przyjmuje jeden argument, nazwa, typu string (&str).

Deklarowanie funkcji z argumentami i wartościami zwracanymi

Funkcje Rusta mogą przyjmować wiele argumentów, a granica nie jest jawnie zdefiniowana. Funkcje z argumentami są generalnie bardziej elastyczne, ponieważ mogą pobierać wartości z innych funkcji i części kodu.

Oto typowy model funkcji Rusta, która przyjmuje argumenty:

fn nazwa_funkcji (arg: typ, arg2: typ) {
// ciało funkcji tutaj
}

Typ argumentu funkcji może być typem wbudowanym w Rust lub typem niestandardowym z twojego programu.

Oto przykład prostej funkcji, która przyjmuje dwie liczby całkowite jako argumenty:

fn dodaj_liczby (x: i32, y: i32) {
println!("{}", x + y);
}

The dodaj_liczby funkcja pobiera dwie 32-bitowe liczby całkowite i wyświetla sumę liczb całkowitych.

Funkcje Rusta mogą zwracać wiele wartości; będziesz musiał określić zwracane typy i zwrócić wartości typu z funkcji.

fn nazwa_funkcji (arg: typ, arg2: typ) -> (typ, typ) {
// ciało funkcji tutaj
powrót arg, arg2
}

Oto funkcja, która jako argument przyjmuje łańcuch znaków i 32-bitową liczbę całkowitą i zwraca argumenty w postaci krotki.

fn string_and_integer (s: String, n: i32) -> (String, i32) {
powrót (s, n);
}

The string_and_integer funkcja pobiera ciąg znaków i 32-bitową liczbę całkowitą, zwracając je jako krotkę. Możesz zwrócić tylko jedną wartość z funkcji Rust.

Możesz pominąć powrót słowo kluczowe podczas zwracania końcowego wyrażenia z funkcji, aby kod był bardziej zwięzły.

fn string_and_integer (s: String, n: i32) -> (String, i32) {
powrót (s, n);
}

// funkcje są równoważne

fn str_and_int (s: Ciąg, n: i32) -> (Ciąg, i32) {
(s, n)
}

Te dwie funkcje zachowują się tak samo, ponieważ obie pobierają łańcuch i liczbę całkowitą i zwracają te argumenty jako krotkę.

Wywoływanie funkcji Rusta

Możesz wywołać jedną funkcję z drugiej, wpisując jej nazwę, a następnie wartości, które chcesz przekazać, w nawiasach:

fn dodaj_liczby (x: i32, y: i32) -> i32 {
x + y
}

fn main() {
niech wynik = dodaj_liczby (3, 5);
println!("Wynik to {}", wynik); // Dane wyjściowe: Wynikiem jest 8
}

The główny wywołania funkcji dodaj_liczby, przekazując mu dwie liczby całkowite. Przypisuje wynik funkcji do zmiennej, wynik.

Możesz zadeklarować funkcje dla struktur rdzy

Możesz deklarować funkcje w strukturach Rusta. Stają się one metodami dla struktury, które mogą uzyskiwać do niej dostęp i ją modyfikować.

Rust nie jest zorientowany wyłącznie obiektowo, ale zapewnia struktury do grupowania powiązanych danych. Możesz pracować nad implementacją koncepcji OOP w Rust za pomocą struktur z metodami.