Näiden kahden käsitteen oppiminen auttaa vahvistamaan ymmärrystäsi siitä, miten Rust toimii ja kuinka voit ottaa käyttöön OOP-ominaisuuksia.

Ominaisuudet ja elinajat ovat Rustin avainkomponentteja. Ominaisuuksien avulla voit määrittää toteutettavien tyyppien käyttäytymistä ja ominaisuuksia. Ne ovat erittäin monipuolisia, joten voit kirjoittaa yleisempää koodia, vähentää päällekkäisyyksiä ja parantaa ylläpidettävyyttä.

Rust käyttää toista mekanismia - eliniän - seuratakseen muuttujien omistajuutta soveltamisalan sisällä ja ulkopuolella. Tämä estää osoittimien roikkumisen muuttujan purkamisen aikana.

Yhdessä ominaisuudet ja elinajat auttavat varmistamaan tyyppiturvallisuuden, muistin turvallisuuden ja koodin luotettavuuden.

Ruosteen piirteiden ymmärtäminen

Ominaisuudet ovat kokoelma menetelmiä, joita muut tyypit voivat toteuttaa. Ominaisuudet ovat samanlaisia käyttöliittymät kielillä, kuten Java, Go ja TypeScript, mutta joustavampi.

Tulet käyttämään piirre avainsana määrittää piirteet Rustissa, jota seuraa menetelmän allekirjoitusten ilmoitus.

piirreMyTrait {
fnminun_menetelmäni(&itse);
}

Koodi määrittelee ominaisuuden nimeltä MyTrait kanssa minun_menetelmäni menetelmä. The &itse parametri osoittaa, että menetelmä viittaa toteutustyypin objektiin ensimmäisenä parametrinaan.

Kun olet määrittänyt ominaisuuden, voit ottaa sen käyttöön mukautetuissa tyypeissäsi.

Näin voit toteuttaa ominaisuuden rakennetyypeillesi.

structHenkilö {
nimi: merkkijono,
ikä: u32,
}

impl Tiedot varten Henkilö {
fnyhteenveto(&itse) {
println!("Nimeni on {} ja olen {} vuotta vanha.", itse.nimi, itse.ikä);
}
}

The Henkilö rakentaa työvälineitä Tiedot, ja voit soittaa numeroon yhteenveto menetelmä tapauksissa Henkilö struct.

fnpää(){
antaa john = Henkilö { nimi: merkkijono::from("John"), ikä: 30 };
john.yhteenveto(); // Tulos: Nimeni on John ja olen 30-vuotias.
}

The John muuttuja on esimerkki Henkilö struct.

The pää toimintokutsuja yhteenveto joka tulostaa viestin konsoliin:

Enumit voivat toteuttaa ominaisuuksia. Näin voit määrittää enumin muunnelmilla, jotka toteuttavat yhteenveto menetelmä:

enumMyEnum {
Variantti A,
Variantti B,
}

impl Tiedot varten OmaEnum {
fnyhteenveto(&itse) {
otteluitse {
OmaEnum:: VariantA => {
// toteutus VariantA: lle
}
Oma Enum:: VarianttiB => {
// VariantB: n toteutus
}
}
}
}

Ominaisuuksien käyttäminen funktioparametreihin ja palautusarvoihin

Voit käyttää ominaisuuksia funktioparametreina ja palautusarvoina. Ominaisuuksien käyttäminen funktioparametreina on kätevää kirjoitettaessa yleistä koodia useilla tyypeillä.

Tässä on funktio, joka ottaa minkä tahansa tyyppisen parametrin, joka toteutuu Tiedot.

fntee jotain(arvo: T) {
arvo.summary();
}

The syntaksi määrittää sen T täytyy toteuttaa Tiedot. Voit soittaa yhteenveto funktio millä tahansa arvolla, joka toteuttaa Tiedot.

Eliniä ruosteessa

Rustin lainatarkistustyökalu analysoi ohjelmia ja varmistaa oikean muistin käytön. Ruosteessa, jokaisella arvolla on omistaja joka on vastuussa arvon jakamisesta. Kun muuttujat lainaavat arvoja, he lainaavat viittauksen siirrettyyn arvoon, mutta omistaja säilyttää omistusoikeuden.

Elinikä on tapa varmistaa, että lainattuja arvoja käytetään oikein. Elinikä on viitteeseen liitetty tarra, joka kuvaa viitteen voimassaoloajan.

Rustissa voit määrittää eliniän heittomerkin avulla:

toimi<'a>

Viitteen luomisen yhteydessä viitteelle määritetään käyttöikä, joka kuvaa sen voimassaoloajan. Jos sinulla on funktio, joka ottaa viittauksen arvoon, eliniän on oltava funktiokutsua pidempi, jotta varmistetaan, että arvo on kelvollinen, kun funktio palaa.

Tässä on esimerkki funktion käyttöiän määrittelystä.

fntee jotain<'a>(x: &'ai32) -> &'ai32 {
x
}

fnpää() {
antaa x = 42;
antaa tulos = do_something(&x);
println!("Tulos on: {}", tulos);
}

Vuonna tee jotain toiminto, 'a käyttöikä parametri osoittaa, että viittaus x on voimassa niin kauan kuin funktiokutsu. Palautettu viite on myös voimassa niin kauan kuin funktiokutsu.

The pää toiminto tulostaa tuloksen välittämällä viittauksen x muuttuja kohdassa pää toiminto konsoliin.

Elinikäinen syntaksi voi olla monisanainen, mutta se on välttämätöntä turvallisuuden ja muistinhallinnan kannalta. Kolmen elinkaaren elision säännöt tarjoavat ohjeita, joiden avulla Rust voi päätellä viitteiden käyttöiän tietyissä tilanteissa.

Syötön käyttöikäsääntö

Syötön käyttöikäsääntö määrittää, että jos funktio tai menetelmä ottaa yhden tai useamman viittauksen syöttöparametreiksi, Rust olettaa, että kaikilla viitteillä on sama elinikä.

Yksinkertaisesti sanottuna lähtöviitteiden käyttöikä on sama kuin tuloviitteiden.

fnpisin<'a>(x: &'astr, y: &'astr) -> &'astr {
jos x.len() > y.len() { x } muu { v }
}

Vuonna pisin toiminto, Rust päättelee, että lähtöreferenssin käyttöikä on sama kuin tuloviitteen, koska molemmilla on sama käyttöikäparametri 'a.

Syötön käyttöikäsääntö tekee useista viittauksista syötettävien yleisten funktioiden kirjoittamisen helpoksi.

Tuotoksen käyttöikäsääntö

Ulostulon käyttöiän sääntö määrittää, että jos funktio tai menetelmä palauttaa viitteen, Rust olettaa, että lähtöviitteen käyttöikä on erilainen kuin minkä tahansa tuloviitteen käyttöikä.

fnensimmäinen_sana<'a>(s: &'astr) -> &'astr {
s.split_whitespace().next().unwrap()
}

Tässä funktiossa Rust päättelee, että lähtöreferenssin käyttöikä on erilainen kuin tuloreferenssin käyttöikä, koska split_whitespace() menetelmä luo lähtöviitteen, joka ei ota sisääntuloviiteparametreja.

Elision of Lifetimes -sääntö

Elinaikojen sääntöä sovelletaan, jos funktio tai menetelmä ottaa yhden viittauksen tai syöteparametrin ja palauttaa viitteen. Siinä tapauksessa Rust olettaa, että lähtöohjeella on sama käyttöikä kuin tuloviittauksella.

fnpisin<'a>(x: &'astr, y: &str) -> &'astr {
jos x.len() > y.len() { x } muu { v }
}

Tässä funktiossa Rust päättelee, että lähtöreferenssin käyttöikä on sama kuin tuloreferenssin käyttöikä, koska tuloreferenssi y ei ole käyttöikäparametria. Ruoste ohittaa käyttöiän parametrin y ja olettaa, että sen käyttöikä on sama kuin x.

Tämä sääntö helpottaa funktioiden kirjoittamista, jotka ottavat yhden tuloviitteen ja palauttavat yhden lähtöviittauksen.

Ominaisuudet ja elinajat

Voit yhdistää ominaisuuksia ja elinikää luodaksesi yleisiä toimintoja, jotka toimivat tyypeissä, jotka toteuttavat ominaisuuden ja joilla on kelvollinen käyttöikä.

Tässä on ominaisuus ja funktio, jotka viittaavat ominaisuuden toteuttavaan arvoon.

piirreToString {
fnmerkkijonoon(&itse) -> merkkijono;
}

fnmerkkijonoon<'a, T: ToString>(t: &'a T) -> merkkijono {
t.to_string()
}

Tässä elinikäparametri 'a varmistaa, että viittaus t on voimassa sen kohteen käyttöiän ajan. Voit käyttää merkkijonoon toimivat tyypeillä, jotka toteuttavat ToString ominaisuus, jolla on voimassa oleva elinikä.

Ominaisuudet muodostavat perustan OOP-konseptien toteuttamiselle ruosteessa

Ominaisuuksien avulla voit määritellä käyttäytymistä. Vaikka Rust ei ole olio-ohjelmointikieli (OOP), voit käyttää ominaisuuksia OOP-konseptien toteuttamiseen kapseloinnista periytymiseen, polymorfismiin ja abstraktioon.

Näiden OOP-konseptien toteuttaminen ominaisuuksien kanssa tekee Rust-ohjelmistasi skaalautuvia, kestäviä, ylläpidettäviä ja tehokkaita.