Læsere som dig hjælper med at støtte MUO. Når du foretager et køb ved hjælp af links på vores websted, kan vi optjene en affiliate-kommission. Læs mere.

En nøglefunktion, der gør Rust kraftfuld og mere tiltalende, er dens støtte til strukturer. Strukturer er sammensatte datatyper til gruppering af relaterede data. De giver dig mulighed for at definere tilpassede datatyper med navngivne felter, der forbedrer kodeorganisering og gør datamanipulation lettere.

Du kan bruge strukturer til at repræsentere forskellige objekter, herunder brugerdefinerede datatyper og konfigurationer. Strukturer er mere fleksible end mange andre datastrukturer. Deres evne til at indkapsle relaterede data gør dem nyttige, da de skaber en mere logisk model af objekter fra den virkelige verden.

Definition af strukturer og strukturfelter

Du definerer en struktur ved at bruge struktur nøgleord efterfulgt af et navn til strukturen. Følg dette ved at angive strukturens feltnavne og deres Rustdatatyper inde i et par krøllede seler.

instagram viewer
strukturPerson {
navn: Snor,
alder: u8,
er_elev: bool,
}

Det her Person struct har tre felter. Det navn felt er en streng, den alder feltet er et usigneret 8-bit heltal, og er_elev felt er en boolsk.

Du kan bruge struct-literaler til at oprette struct-forekomster efter struct-definitionen. Strukturliteraler angiver værdierne af en strukturs felter.

lade person = Person {
navn: Snor::fra("John"),
alder: 27,
er_elev: rigtigt,
};

Det person variabel er en forekomst af Person struct, skabt med en struct bogstavelig. Denne bogstavelige instansierer alle felterne i strukturen med værdier af deres tilsvarende datatype.

Brug af konstruktører til at skabe strukturer

Du kan også bruge en konstruktørfunktion til at oprette en forekomst af en struktur.

impl Person {
// Definer en konstruktørfunktion 'ny', der tager 'navn', 'alder' og
// `is_student` parametre
fnny(navn: Snor, alder: u8, er_elev: bool) -> Selv {
// Opret en ny forekomst af `Person` struct og initialiser dens felter
// med de angivne værdier
Selv {
navn,
alder,
er_studerende,
}
}
}

// Kald den `nye` konstruktørfunktion af `Person`-strukturen og tildel
// resulterer forekomst til "person".
lade person = Person:: ny(Snor::fra("John"), 27, rigtigt);

Programmet ovenfor definerer en konstruktør for Person struktur med impl søgeord. Det ny constructor tager struct-felterne ind som argumenter og returnerer en ny forekomst af struct med de initialiserede værdier.

Du kan oprette en Person eksempel med ny konstruktør, og giver den passende argumenter.

Adgang til og ændring af strukturfelter

Du kan få adgang til og ændre strukturfelter ved hjælp af en priknotation. Du bruger blot prikken (.) operatør efterfulgt af feltets navn for at få adgang til eller ændre dets værdi.

// erklære en personstruktur
strukturPerson {
navn: Snor,
alder: u8,
er_elev: bool,
}

fnvigtigste() {
// instansierer en struktur
lademut person = Person {
navn: Snor::fra("John"),
alder: 27,
er_elev: rigtigt,
};

// udskriv navn og aldersfelter for strukturen
println!("Navn: {}", person.navn);
println!("Alder: {}", person.alder);

// ændre feltet is_student
person.is_student = falsk;

println!("Er elev: {}", person.is_student);
}

Programmet opretter en struktur, instansierer strukturen, udskriver navn, og alder felter og ændrer er_elev felt før udskrivning af feltet.

Erklæringsmetoder for konstruktioner

I modsætning til strukturer i C, kan du definere metoder på Rust-strukturer, der fungerer på en instans. Metoder er funktioner, der tager en reference til en struktur for adgang og modifikation. Du kan også bruge punktnotationen til at kalde metoderne for en struktur og få adgang til deres funktionalitet.

Sådan kan du deklarere metoder til strukturer og bruge disse metoder til at udføre operationer:

strukturPerson {
navn: Snor,
alder: u8,
er_elev: bool,
}

impl Person {
fnsig hej(&selv) {
println!("Hej, mit navn er {} og jeg er {} år gammel.", selv.navn,
selv.alder);
}

fnhave_fødselsdag(&mutselv) {
selv.age += 1;
}
}

fnvigtigste() {
lademut person = Person {
navn: Snor::fra("John"),
alder: 27,
er_elev: rigtigt,
};

person.say_hello();

person.har_fødselsdag();

println!("Ny tidsalder: {}", person.alder);
}

Programmet definerer to metoder til Person struktur. Det sig hej metode tager en reference til selv og udskriver en hilsen, der indeholder personens navn og alder. Det have_fødselsdag metode tager en foranderlig reference til selv og øger personens alder.

Rusts ejerskabsmodel optimerer hukommelsesstyring

Strukturer er alsidige datastrukturer, der fungerer som en slags minimal klasseækvivalent.

Som med andre Rust-datastrukturer bør du følge Rusts ejerskabsregler, når du arbejder med strukturvariabler. Ejerskabsmodellen sikrer, at du administrerer hukommelsen effektivt i dine programmer, og forhindrer almindelige problemer som null og dinglende pointer.