En nøkkelfunksjon som gjør Rust kraftig og mer tiltalende er støtten for strukturer. Strukturer er sammensatte datatyper for gruppering av relaterte data. De lar deg definere egendefinerte datatyper med navngitte felt som forbedrer kodeorganisering og gjør datamanipulering enklere.
Du kan bruke strukturer til å representere ulike objekter, inkludert brukerdefinerte datatyper og konfigurasjoner. Strukturer er mer fleksible enn mange andre datastrukturer. Deres evne til å kapsle inn relaterte data gjør dem nyttige siden de lager en mer logisk modell av virkelige objekter.
Definere strukturer og strukturfelt
Du definerer en struktur ved å bruke struktur nøkkelord etterfulgt av et navn for strukturen. Følg dette ved å spesifisere strukturens feltnavn og deres Rustdatatyper inne i et par krøllete seler.
strukturPerson {
Navn: String,
alder: u8,
is_student: bool,
}
Dette Person struct har tre felt. De Navn feltet er en streng, den alder feltet er et usignert 8-bits heltall, og er_student felt er en boolsk.
Du kan bruke struct-literaler til å lage struct-forekomster etter struct-definisjonen. Structure literals spesifiserer verdiene til en strukturs felt.
la person = Person {
Navn: String::fra("John"),
alder: 27,
is_student: ekte,
};
De person variabel er en forekomst av Person struct, opprettet med en struct bokstavelig. Denne bokstavelige instansierer alle feltene i strukturen med verdier for deres tilsvarende datatype.
Bruke konstruktører til å lage strukturer
Du kan også bruke en konstruktørfunksjon for å lage en forekomst av en struktur.
impl Person {
// Definer en konstruktørfunksjon `ny` som tar `navn`, `alder` og
// `is_student` parametere
fnny(Navn: String, alder: u8, er_student: bool) -> Selv {
// Opprett en ny forekomst av `Person`-strukturen og initialiser feltene
// med de angitte verdiene
Selv {
Navn,
alder,
er_student,
}
}
}
// Kall den `nye` konstruktørfunksjonen til `Person`-strukturen og tilordne
// resulterer forekomst til "person".
la person = Person:: ny(String::fra("John"), 27, ekte);
Programmet ovenfor definerer en konstruktør for Person struktur med impl nøkkelord. De ny konstruktør tar inn struct-feltene som argumenter og returnerer en ny forekomst av strukturen med de initialiserte verdiene.
Du kan lage en Person eksempel med ny konstruktør, sender den passende argumenter.
Få tilgang til og endre strukturfelt
Du kan få tilgang til og endre strukturfelt ved å bruke en punktnotasjon. Du bruker bare prikken (.) operatør etterfulgt av feltets navn for å få tilgang til eller endre verdien.
// erklære en personstruktur
strukturPerson {
Navn: String,
alder: u8,
is_student: bool,
}fnhoved-() {
// instansierer en struktur
lamut person = Person {
Navn: String::fra("John"),
alder: 27,
is_student: ekte,
};// skriv ut navn og aldersfelt for strukturen
println!("Navn: {}", person.navn);
println!("Alder: {}", person.alder);// endre is_student-feltet
person.is_student = falsk;
println!("Er student: {}", person.is_student);
}
Programmet lager en struktur, instansierer strukturen, skriver ut Navn, og alder felt, og endrer er_student feltet før du skriver ut feltet.
Erklæringsmetoder for konstruksjoner
I motsetning til strukturer i C, kan du definere metoder på Rust-strukturer som opererer på en forekomst. Metoder er funksjoner som tar en referanse til en struktur for tilgang og modifikasjon. Du kan også bruke punktnotasjonen til å kalle metodene til en struktur og få tilgang til funksjonaliteten deres.
Slik kan du deklarere metoder for strukturer og bruke disse metodene til å utføre operasjoner:
strukturPerson {
Navn: String,
alder: u8,
is_student: bool,
}impl Person {
fnsi hei(&selv-) {
println!("Hei, jeg heter {} og jeg er {} år gammel.", selv-.Navn,
selv-.alder);
}fnhar_bursdag(&mutselv-) {
selv-.age += 1;
}
}fnhoved-() {
lamut person = Person {
Navn: String::fra("John"),
alder: 27,
is_student: ekte,
};person.si_hei();
person.har_bursdag();
println!("Ny alder: {}", person.alder);
}
Programmet definerer to metoder for Person struktur. De si hei metode tar en referanse til selv- og skriver ut en hilsen som inkluderer personens navn og alder. De har_bursdag metoden tar en foranderlig referanse til selv- og øker personens alder.
Rusts eierskapsmodell optimaliserer minnehåndtering
Strukturer er allsidige datastrukturer, som fungerer som en slags minimal klasseekvivalent.
Som med andre Rust-datastrukturer, bør du følge Rusts eierskapsregler når du arbeider med strukturvariabler. Eierskapsmodellen sikrer at du administrerer minnet effektivt i programmene dine, og forhindrer vanlige problemer som null og hengende pekere.