Čitatelji poput vas podržavaju MUO. Kada kupite putem poveznica na našoj stranici, možemo zaraditi partnersku proviziju. Čitaj više.

Jedna ključna značajka koja čini Rust snažnim i privlačnijim je njegova podrška za strukture. Strukture su složeni tipovi podataka za grupiranje povezanih podataka. Omogućuju vam da definirate prilagođene vrste podataka s imenovanim poljima koja poboljšavaju organizaciju koda i olakšavaju manipulaciju podacima.

Možete koristiti strukture za predstavljanje različitih objekata, uključujući korisnički definirane tipove podataka i konfiguracije. Strukture su fleksibilnije od mnogih drugih struktura podataka. Njihova sposobnost kapsuliranja povezanih podataka čini ih korisnima jer stvaraju logičniji model objekata iz stvarnog svijeta.

Definiranje struktura i polja strukture

Strukturu ćete definirati pomoću strukturirati ključna riječ iza koje slijedi naziv strukture. Slijedite ovo određivanjem naziva polja strukture i njihovih Rust tipovi podataka unutar para vitičastih zagrada.

instagram viewer
strukturiratiOsoba {
Ime: Niz,
dob: u8,
je_student: bool,
}

Ovaj Osoba struct ima tri polja. The Ime polje je niz, the dob polje je nepredznačeni 8-bitni cijeli broj, a je_student polje je booleov.

Strukturne literale možete koristiti za stvaranje instanci strukture nakon definicije strukture. Strukturni literali određuju vrijednosti polja strukture.

neka osoba = osoba {
Ime: Niz::iz("Ivan"),
dob: 27,
je_student: pravi,
};

The osoba varijabla je instanca Osoba struct, stvoren literalom struct. Ovaj literal instancira sva polja strukture s vrijednostima njihovog odgovarajućeg tipa podataka.

Korištenje konstruktora za stvaranje struktura

Također možete koristiti funkciju konstruktora za stvaranje instance strukture.

impl osoba {
// Definirajte funkciju konstruktora `new` koja uzima `name`, `age` i
// parametri `is_student`
fnnovi(Ime: Niz, dob: u8, je_student: bool) -> sebe {
// Stvorite novu instancu strukture `Osoba` i inicijalizirajte njezina polja
// s navedenim vrijednostima
sebe {
Ime,
dob,
je_student,
}
}
}

// Pozovite funkciju konstruktora `new` strukture `Person` i dodijelite
// rezultirajuća instanca za `osobu`
neka osoba = Osoba:: novo(Niz::iz("Ivan"), 27, pravi);

Gornji program definira konstruktor za Osoba strukturirati s impl ključna riječ. The novi konstruktor uzima polja strukture kao argumente i vraća novu instancu strukture s inicijaliziranim vrijednostima.

Možete stvoriti a Osoba primjer s novi konstruktor, prosljeđujući mu odgovarajuće argumente.

Pristup i izmjena strukturnih polja

Strukturnim poljima možete pristupiti i mijenjati ih pomoću notacije s točkama. Jednostavno koristite točku (.) iza kojeg slijedi naziv polja za pristup ili promjenu njegove vrijednosti.

// deklariramo strukturu osobe
strukturiratiOsoba {
Ime: Niz,
dob: u8,
je_student: bool,
}

fnglavni() {
// instanciranje strukture
nekamut osoba = osoba {
Ime: Niz::iz("Ivan"),
dob: 27,
je_student: pravi,
};

// ispis polja imena i starosti strukture
println!("Ime: {}", ime.osobe);
println!("Dob: {}", osoba.dob);

// mijenjanje polja is_student
osoba.je_student = lažno;

println!("Je student: {}", osoba.je_student);
}

Program stvara strukturu, instancira strukturu, ispisuje Ime, i dob polja i mijenja je_student polje prije ispisa polja.

Deklariranje metoda za strukture

Za razliku od strukture u C, možete definirati metode na Rust strukturama koje rade na instanci. Metode su funkcije koje uzimaju referencu na strukturu za pristup i izmjenu. Također možete koristiti notaciju s točkama za pozivanje metoda strukture i pristup njihovoj funkcionalnosti.

Evo kako možete deklarirati metode za strukture i koristiti te metode za izvođenje operacija:

strukturiratiOsoba {
Ime: Niz,
dob: u8,
je_student: bool,
}

impl osoba {
fnreci zdravo(&sebe) {
println!("Zdravo, moje ime je {} i imam {} godina.", sebe.Ime,
sebe.dob);
}

fnimati_rođendan(&mutsebe) {
sebe.dob += 1;
}
}

fnglavni() {
nekamut osoba = osoba {
Ime: Niz::iz("Ivan"),
dob: 27,
je_student: pravi,
};

person.say_hello();

person.have_birthday();

println!("Novo doba: {}", osoba.dob);
}

Program definira dvije metode za Osoba strukturirati The reci zdravo metoda uzima referencu na sebe i ispisuje pozdrav koji uključuje ime i dob osobe. The imati_rođendan metoda uzima promjenjivu referencu na sebe i povećava dob osobe.

Rustov model vlasništva optimizira upravljanje memorijom

Strukture su svestrane podatkovne strukture koje djeluju kao neka vrsta minimalnog ekvivalenta klase.

Kao i s drugim Rust strukturama podataka, trebali biste slijediti Rustova pravila vlasništva kada radite s strukturnim varijablama. Model vlasništva osigurava da učinkovito upravljate memorijom u svojim programima, sprječavajući uobičajene probleme poput nultih i visećih pokazivača.