Ena ključnih lastnosti, zaradi katere je Rust močan in privlačnejši, je njegova podpora za strukture. Strukture so sestavljeni tipi podatkov za združevanje povezanih podatkov. Omogočajo vam definiranje tipov podatkov po meri z imenovanimi polji, ki izboljšajo organizacijo kode in olajšajo manipulacijo podatkov.
Strukture lahko uporabite za predstavitev različnih objektov, vključno z uporabniško definiranimi tipi podatkov in konfiguracijami. Strukture so bolj prilagodljive kot mnoge druge podatkovne strukture. Njihova zmožnost enkapsulacije povezanih podatkov jih naredi uporabne, saj ustvarijo bolj logičen model predmetov iz resničnega sveta.
Definiranje struktur in strukturnih polj
Strukturo boste definirali z uporabo struct ključna beseda, ki ji sledi ime za strukturo. Sledite temu tako, da določite imena polj strukture in njihova Vrste podatkov Rust znotraj para zavitih oklepajev.
structOseba {
ime: Vrvica,
starost: u8,
je_študent: bool,
}
to Oseba struct ima tri polja. The ime polje je niz, the starost je 8-bitno celo število brez predznaka in polje je_študent polje je logična vrednost.
S strukturnimi literali lahko ustvarite primerke strukture po definiciji strukture. Strukturni literali določajo vrednosti polj strukture.
pustiti oseba = oseba {
ime: Vrvica::od("Janez"),
starost: 27,
je_študent: prav,
};
The oseba spremenljivka je primerek Oseba struct, ustvarjen z literalom struct. Ta literal instancira vsa polja strukture z vrednostmi njihovega ustreznega podatkovnega tipa.
Uporaba konstruktorjev za ustvarjanje struktur
Za ustvarjanje primerka strukture lahko uporabite tudi funkcijo konstruktorja.
impl Oseba {
// Definirajte funkcijo konstruktorja `new`, ki sprejme `name`, `age` in
// parametri `is_student`
fnnovo(ime: Vrvica, starost: u8, je_študent: bool) -> sebe {
// Ustvarite nov primerek strukture `Person` in inicializirajte njena polja
// s podanimi vrednostmi
sebe {
ime,
starost,
je_študent,
}
}
}
// Pokliči funkcijo konstruktorja `new` strukture `Person` in dodeli
// nastala instanca za `osebo`
pustiti oseba = Oseba:: novo(Vrvica::od("Janez"), 27, prav);
Zgornji program definira konstruktor za Oseba struct z impl ključna beseda. The novo konstruktor vzame polja struct kot argumente in vrne nov primerek struct z inicializiranimi vrednostmi.
Ustvarite lahko a Oseba primer z novo konstruktor, ki mu posreduje ustrezne argumente.
Dostopanje in spreminjanje strukturnih polj
Do strukturnih polj lahko dostopate in jih spreminjate z zapisom s pikami. Preprosto uporabite piko (.), ki mu sledi ime polja za dostop ali spreminjanje njegove vrednosti.
// deklariramo strukturo osebe
structOseba {
ime: Vrvica,
starost: u8,
je_študent: bool,
}fnglavni() {
// instanciranje strukture
pustitimut oseba = oseba {
ime: Vrvica::od("Janez"),
starost: 27,
je_študent: prav,
};// izpis polj z imenom in starostjo strukture
println!("Ime: {}", ime.osebe);
println!("Starost: {}", oseba.starost);// spremenite polje is_student
oseba.je_študent = lažno;
println!("Je študent: {}", oseba.je_študent);
}
Program ustvari strukturo, instancira strukturo, natisne ime, in starost polja in spreminja je_študent pred tiskanjem polja.
Deklariranje metod za strukture
Za razliko od strukture v C, lahko definirate metode na strukturah Rust, ki delujejo na primerku. Metode so funkcije, ki se sklicujejo na strukturo za dostop in spreminjanje. Zapis s piko lahko uporabite tudi za klicanje metod strukture in dostop do njihove funkcionalnosti.
Tukaj je opisano, kako lahko deklarirate metode za strukture in uporabite te metode za izvajanje operacij:
structOseba {
ime: Vrvica,
starost: u8,
je_študent: bool,
}impl Oseba {
fnreci živijo(&sebe) {
println!("Pozdravljeni, ime mi je {} in star sem {} let.", sebe.ime,
sebe.starost);
}fnimeti_rojstni dan(&mutsebe) {
sebe.starost += 1;
}
}fnglavni() {
pustitimut oseba = oseba {
ime: Vrvica::od("Janez"),
starost: 27,
je_študent: prav,
};person.say_hello();
person.have_birthday();
println!("Nova doba: {}", oseba.starost);
}
Program definira dva načina za Oseba struct. The reci živijo metoda se sklicuje na sebe in natisne pozdrav, ki vključuje ime in starost osebe. The imeti_rojstni dan metoda ima spremenljivo sklicevanje na sebe in povečuje starost osebe.
Rustov model lastništva optimizira upravljanje pomnilnika
Strukture so vsestranske podatkovne strukture, ki delujejo kot nekakšen minimalni ekvivalent razreda.
Tako kot pri drugih podatkovnih strukturah Rust morate tudi pri delu s spremenljivkami strukture upoštevati Rustova pravila lastništva. Model lastništva zagotavlja, da učinkovito upravljate pomnilnik v svojih programih in preprečuje pogoste težave, kot so ničelni in viseči kazalci.