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.
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.