Struktury jako parametry funkcji
Część sekcji Logika i przepływ programu ścieżki Rust w Coddy. Lekcja 24 z 66.
Teraz, gdy wiesz już, jak tworzyć i modyfikować struktury, przyjrzyjmy się temu, jak używać ich w funkcjach. Tak jak każdy inny typ danych w Rust, instancje struktur możesz przekazywać do funkcji i zwracać z funkcji.
Aby przekazać strukturę do funkcji, po prostu uwzględnij ją jako parametr w definicji funkcji:
fn calculate_area(rect: Rectangle) -> i32 {
rect.width * rect.height
}Ta funkcja przyjmuje strukturę Rectangle jako parametr i zwraca i32. Wewnątrz funkcji możesz uzyskać dostęp do pól struktury za pomocą notacji kropkowej, tak jak w każdym innym miejscu.
Możesz również zwracać struktury z funkcji, określając typ struktury jako typ zwracany:
fn create_square(size: i32) -> Rectangle {
Rectangle {
width: size,
height: size,
}
}Używanie struktur z funkcjami sprawia, że twój kod jest bardziej uporządkowany i czytelny. Zamiast przekazywać wiele pojedynczych parametrów, możesz pogrupować powiązane dane i przekazać je jako jedną, dobrze zdefiniowaną całość.
Wyzwanie
ŁatwyOtrzymasz cztery dane wejściowe: szerokość prostokąta (jako liczbę całkowitą), wysokość prostokąta (jako liczbę całkowitą), długość boku kwadratu (jako liczbę całkowitą) oraz numer wyboru (1 lub 2). Zdefiniuj strukturę Rectangle z dwoma polami: width: i32 i height: i32. Utwórz dwie funkcje: jedną, która przyjmuje Rectangle i oblicza jego pole, oraz drugą, która przyjmuje długość boku i zwraca Rectangle reprezentujący kwadrat. Na podstawie wybranego numeru oblicz i wypisz odpowiednie pole.
Wymagania:
- Zdefiniuj strukturę
Rectanglez polami:width: i32iheight: i32 - Utwórz funkcję
calculate_area, która przyjmujeRectanglejako parametr i zwracai32(pole) - Utwórz funkcję
create_square, która przyjmujei32(długość boku) jako parametr i zwracaRectangleo równej szerokości i wysokości - Odczytaj pierwsze dane wejściowe i przekonwertuj je na
i32, aby uzyskać szerokość prostokąta - Odczytaj drugie dane wejściowe i przekonwertuj je na
i32, aby uzyskać wysokość prostokąta - Utwórz instancję
Rectangleo tych wymiarach - Odczytaj trzecie dane wejściowe i przekonwertuj je na
i32, aby uzyskać długość boku kwadratu - Odczytaj czwarte dane wejściowe i przekonwertuj je na
i32, aby uzyskać numer wyboru (1 lub 2) - Jeśli wybór wynosi 1: oblicz i wypisz pole prostokąta
- Jeśli wybór wynosi 2: utwórz kwadrat za pomocą
create_square, a następnie oblicz i wypisz jego pole
Dane wejściowe:
- Pierwsza linia: szerokość prostokąta jako liczba całkowita (np.
8) - Druga linia: wysokość prostokąta jako liczba całkowita (np.
5) - Trzecia linia: długość boku kwadratu jako liczba całkowita (np.
6) - Czwarta linia: wybór jako liczba całkowita, 1 lub 2 (np.
1)
Dane wyjściowe:
- Jeśli wybór wynosi 1:
Rectangle area: [area] - Jeśli wybór wynosi 2:
Square area: [area]
Spróbuj swoich sił
use std::io;
// TODO: Zdefiniuj tutaj strukturę Rectangle
// TODO: Zdefiniuj tutaj funkcję calculate_area
// TODO: Zdefiniuj tutaj funkcję create_square
fn main() {
// Wczytaj szerokość prostokąta
let mut width_input = String::new();
io::stdin().read_line(&mut width_input).expect("Failed to read line");
let width: i32 = width_input.trim().parse().expect("Invalid input");
// Wczytaj wysokość prostokąta
let mut height_input = String::new();
io::stdin().read_line(&mut height_input).expect("Failed to read line");
let height: i32 = height_input.trim().parse().expect("Invalid input");
// Wczytaj długość boku kwadratu
let mut side_input = String::new();
io::stdin().read_line(&mut side_input).expect("Failed to read line");
let side: i32 = side_input.trim().parse().expect("Invalid input");
// Wczytaj wybór
let mut choice_input = String::new();
io::stdin().read_line(&mut choice_input).expect("Failed to read line");
let choice: i32 = choice_input.trim().parse().expect("Invalid input");
// TODO: Napisz swój kod poniżej
// Utwórz instancję Rectangle, sprawdź wybór i oblicz odpowiednie pole
// Wyświetl wynik w zależności od wyboru
// Użyj: println!("Rectangle area: {}", area); lub println!("Square area: {}", area);
}Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i przepływ programu
1Zaawansowane sterowanie przepływem
Wyrażenie „match”Dopasowywanie wielu wartościDopasowywanie zakresówWyrażenie „if let”Pętle jako wyrażeniaPodsumowanie — prosty parser poleceń4Grupowanie danych za pomocą struktur
Czym jest struktura?Przegląd strukturDostęp do pól strukturyModyfikowalne strukturyStruktury jako parametry funkcjiStruktury krotkowePodsumowanie — utwórz strukturę Book2Wprowadzenie do wektorów
Czym jest wektor?Tworzenie wektoraDodawanie elementów za pomocą pushDostęp do elementów wektoraIterowanie po wektorzeIterowanie z możliwością modyfikacjiUsuwanie elementówPodsumowanie — prosty licznik punktów5Pary klucz–wartość z mapami hashującymi
Czym jest mapa haszująca?Tworzenie mapy haszującejWstawianie par klucz–wartośćDostęp do wartościIterowanie po mapie haszującejAktualizowanie wartościUsuwanie paryPodsumowanie – licznik słów8Projekt: Prosty system inwentaryzacji
Konfiguracja projektuDodawanie produktuSprawdzanie stanu magazynowegoSprzedaż produktuŁączenie wszystkiego w całość3Lista zadań w wierszu poleceń
Konfiguracja projektuDodawanie zadaniaWyświetlanie wszystkich zadańUsuwanie zadaniaKońcowy kodPoćwicz samodzielnie: Kompilator Rust online