Teiesugused lugejad aitavad MUO-d toetada. Kui teete ostu meie saidil olevate linkide abil, võime teenida sidusettevõtte komisjonitasu. Loe rohkem.

Üks põhifunktsioon, mis muudab Rusti võimsamaks ja atraktiivsemaks, on selle tugi struktuuridele. Struktuurid on liitandmetüübid seotud andmete rühmitamiseks. Need võimaldavad teil määratleda kohandatud andmetüüpe nimeliste väljadega, mis parandavad koodi organiseerimist ja muudavad andmetega manipuleerimise lihtsamaks.

Struktuure saate kasutada erinevate objektide, sealhulgas kasutaja määratud andmetüüpide ja konfiguratsioonide esitamiseks. Struktuurid on paindlikumad kui paljud teised andmestruktuurid. Nende võime seotud andmeid kapseldada muudab need kasulikuks, kuna loovad reaalmaailma objektide loogilisema mudeli.

Struktuuride ja struktuuriväljade määratlemine

Struktuuri saate määratleda, kasutades struktuur märksõna, millele järgneb struktuuri nimi. Järgige seda, määrates struktuuri väljade nimed ja nende nimed Rooste andmetüübid paari lokkis trakside sees.

struktuurIsik {
nimi: String,
vanus: u8,
is_student: bool,
}

See Isik struktuuril on kolm välja. The nimi väli on string, vanus väli on märgita 8-bitine täisarv ja on_tudeng väli on tõeväärtus.

Struktuurieksemplaride loomiseks pärast struktuuri definitsiooni saate kasutada struktuuriliteraale. Struktuuriliteraalid määravad struktuuri väljade väärtused.

lase isik = isik {
nimi: String::from("John"),
vanus: 27,
is_student: tõsi,
};

The isik muutuja on eksemplar Isik struct, loodud struct literaaliga. See literaal loob kõik struktuuri väljad neile vastava andmetüübi väärtustega.

Konstruktorite kasutamine struktuuride loomiseks

Struktuuri eksemplari loomiseks saate kasutada ka konstruktorifunktsiooni.

impl Isik {
// Määratlege konstruktori funktsioon "new", mis võtab "nimi", "vanus" ja
// "on_student" parameetrid
fnuus(nimi: String, vanus: u8, is_student: bool) -> Ise {
// Looge struktuuri "Person" uus eksemplar ja lähtestage selle väljad
// antud väärtustega
Ise {
nimi,
vanus,
is_tudeng,
}
}
}

// Kutsuge välja struktuuri "Person" konstruktorfunktsioon "uus" ja määrake
// tulemuseks 'isik'
lase isik = isik:: uus(String::from("John"), 27, tõsi);

Ülaltoodud programm määratleb selle jaoks konstruktori Isik konstrueerida koos impl märksõna. The uus konstruktor võtab struktuuri väljad argumentidena sisse ja tagastab struktuuri uue eksemplari koos lähtestatud väärtustega.

Saate luua a Isik näiteks koos uus konstruktor, edastades sellele asjakohased argumendid.

Juurdepääs struktuuriväljadele ja nende muutmine

Struktuuriväljadele pääsete juurde ja neid saate muuta punktitähistusega. Sa kasutad lihtsalt punkti (.) operaatorit, millele järgneb välja nimi, et pääseda juurde või muuta selle väärtust.

// deklareerida Isiku struktuur
struktuurIsik {
nimi: String,
vanus: u8,
is_student: bool,
}

fnpeamine() {
// instantieerima struktuuri
lasemut isik = isik {
nimi: String::from("John"),
vanus: 27,
is_student: tõsi,
};

// prindib struktuuri nime ja vanuse väljad
println!("Nimi: {}", isik.nimi);
println!("Vanus: {}", isik.vanus);

// muutke välja is_student
isik.on_tudeng = vale;

println!("Kas õpilane: {}", isik.on_õpilane);
}

Programm loob struktuuri, loob selle ja prindib selle nimi, ja vanus väljad ja muudab on_tudeng enne välja printimist.

Struktuuride deklareerimismeetodid

Erinevalt struktuurid C-s, saate määratleda meetodeid Rust-struktuurides, mis töötavad eksemplaril. Meetodid on funktsioonid, mis kasutavad juurdepääsuks ja muutmiseks viidet struktuurile. Punktmärki saate kasutada ka struktuuri meetodite kutsumiseks ja nende funktsioonidele juurdepääsuks.

Siin on, kuidas saate deklareerida struktuuride jaoks meetodeid ja kasutada neid meetodeid toimingute tegemiseks.

struktuurIsik {
nimi: String,
vanus: u8,
is_student: bool,
}

impl Isik {
fnütle Tere(&ise) {
println!("Tere, minu nimi on {} ja ma olen {} aastat vana.", ise.name,
ise.vanus);
}

fnon_sünnipäev(&mutise) {
ise.vanus += 1;
}
}

fnpeamine() {
lasemut isik = isik {
nimi: String::from("John"),
vanus: 27,
is_student: tõsi,
};

isik.say_tere();

isik.on_sünnipäev();

println!("Uue ajastu: {}", isik.vanus);
}

Programm määratleb kaks meetodit Isik struktuur. The ütle Tere meetod viitab ise ja prindib tervituse, mis sisaldab inimese nime ja vanust. The on_sünnipäev meetod kasutab muutuvat viidet ise ja tõstab inimese vanust.

Rusti omandimudel optimeerib mäluhaldust

Struktuurid on mitmekülgsed andmestruktuurid, mis toimivad omamoodi minimaalse klassi ekvivalentina.

Nagu teistegi Rusti andmestruktuuride puhul, peaksite struktuurimuutujatega töötades järgima Rusti omandireegleid. Omandimudel tagab, et haldate oma programmides mälu tõhusalt, vältides levinud probleeme, nagu null- ja rippuvad osutid.