Czytelnicy tacy jak ty pomagają wspierać MUO. Kiedy dokonujesz zakupu za pomocą linków na naszej stronie, możemy otrzymać prowizję partnerską. Czytaj więcej.

Jedną z kluczowych cech, która sprawia, że ​​Rust jest potężny i bardziej atrakcyjny, jest obsługa struktur. Struktury to złożone typy danych służące do grupowania powiązanych danych. Pozwalają definiować niestandardowe typy danych z nazwanymi polami, które poprawiają organizację kodu i ułatwiają manipulowanie danymi.

Możesz użyć struktur do reprezentowania różnych obiektów, w tym typów danych i konfiguracji zdefiniowanych przez użytkownika. Struktury są bardziej elastyczne niż wiele innych struktur danych. Ich zdolność do enkapsulacji powiązanych danych czyni je użytecznymi, ponieważ tworzą bardziej logiczny model rzeczywistych obiektów.

Definiowanie struktur i pól struktur

Zdefiniujesz strukturę, używając metody struktura słowo kluczowe, po którym następuje nazwa struktury. Postępuj zgodnie z tym, określając nazwy pól struktury i ich Typy danych Rusta wewnątrz pary nawiasów klamrowych.

strukturaOsoba {
nazwa: Strunowy,
wiek: u8,
jest_studentem: bool,
}

Ten Osoba struct ma trzy pola. The nazwa pole jest ciągiem znaków, wiek pole jest 8-bitową liczbą całkowitą bez znaku, a pole jest_studentem pole jest wartością logiczną.

Literałów struktury można używać do tworzenia wystąpień struktury po definicji struktury. Literały strukturalne określają wartości pól struktury.

pozwalać osoba = osoba {
nazwa: Strunowy::z("Jan"),
wiek: 27,
jest_studentem: PRAWDA,
};

The osoba zmienna jest instancją Osoba struct, utworzony za pomocą literału struct. Ten literał tworzy instancję wszystkich pól struktury z wartościami odpowiadającego im typu danych.

Używanie konstruktorów do tworzenia struktur

Możesz także użyć funkcji konstruktora, aby utworzyć instancję struktury.

implik Osoba {
// Zdefiniuj funkcję konstruktora `new`, która pobiera `name`, `age` i
// parametry `is_student`
przypnowy(nazwa: Strunowy, wiek: u8, jest_studentem: bool) -> Samego siebie {
// Utwórz nową instancję struktury `Person` i zainicjuj jej pola
// z podanymi wartościami
Samego siebie {
nazwa,
wiek,
jest_studentem,
}
}
}

// Wywołaj funkcję konstruktora `new` struktury `Person` i przypisz
// wynikowa instancja do `person`
pozwalać osoba = Osoba:: nowa(Strunowy::z("Jan"), 27, PRAWDA);

Powyższy program definiuje konstruktor dla Osoba konstrukcja z implik słowo kluczowe. The nowy konstruktor przyjmuje pola struktury jako argumenty i zwraca nową instancję struktury z zainicjowanymi wartościami.

Możesz utworzyć Osoba przykład z nowy konstruktora, przekazując mu odpowiednie argumenty.

Uzyskiwanie dostępu i modyfikowanie pól strukturalnych

Możesz uzyskiwać dostęp do pól struktury i modyfikować je za pomocą notacji kropkowej. Po prostu używasz kropki (.), po którym następuje nazwa pola, aby uzyskać dostęp do jego wartości lub ją zmienić.

// zadeklaruj strukturę Person
strukturaOsoba {
nazwa: Strunowy,
wiek: u8,
jest_studentem: bool,
}

przypgłówny() {
// utwórz instancję struktury
pozwalaćmut osoba = osoba {
nazwa: Strunowy::z("Jan"),
wiek: 27,
jest_studentem: PRAWDA,
};

// wypisuje pola nazwy i wieku struktury
drukuj!("Nazwa: {}", imię osoby);
drukuj!("Wiek: {}", osoba.wiek);

// zmodyfikuj pole is_student
osoba.jest_studentem = FAŁSZ;

drukuj!(„Czy uczeń: {}”, osoba.jest_studentem);
}

Program tworzy strukturę, tworzy instancję struktury, drukuje plik nazwa, I wiek pola i modyfikuje jest_studentem pole przed wydrukowaniem pola.

Deklarowanie metod dla struktur

w odróżnieniu struktury w C, możesz zdefiniować metody w strukturach Rust, które działają na instancji. Metody to funkcje, które odwołują się do struktury w celu uzyskania dostępu i modyfikacji. Możesz także użyć notacji kropkowej, aby wywołać metody struktury i uzyskać dostęp do ich funkcjonalności.

Oto jak możesz deklarować metody dla struktur i używać tych metod do wykonywania operacji:

strukturaOsoba {
nazwa: Strunowy,
wiek: u8,
jest_studentem: bool,
}

implik Osoba {
przypPowiedz cześć(&samego siebie) {
drukuj!(„Cześć, nazywam się {} i mam {} lat”., samego siebie.nazwa,
samego siebie.wiek);
}

przypmieć_urodziny(&mutsamego siebie) {
samego siebiewiek += 1;
}
}

przypgłówny() {
pozwalaćmut osoba = osoba {
nazwa: Strunowy::z("Jan"),
wiek: 27,
jest_studentem: PRAWDA,
};

osoba.powiedz_cześć();

osoba.mieć_urodziny();

drukuj!("Nowa epoka: {}", osoba.wiek);
}

Program definiuje dwie metody dla Osoba struktura. The Powiedz cześć metoda przyjmuje odniesienie do samego siebie i drukuje powitanie zawierające imię i wiek osoby. The mieć_urodziny Metoda przyjmuje zmienne odwołanie do samego siebie i zwiększa wiek osoby.

Model własności w Rust optymalizuje zarządzanie pamięcią

Struktury to wszechstronne struktury danych, działające jako swego rodzaju minimalny odpowiednik klasy.

Podobnie jak w przypadku innych struktur danych Rusta, podczas pracy ze zmiennymi strukturalnymi należy przestrzegać zasad własności Rusta. Model własności zapewnia wydajne zarządzanie pamięcią w programach, zapobiegając typowym problemom, takim jak zerowe i zawieszone wskaźniki.