Pienennä ruostekoodin jalanjälkeäsi ja lisää sen kestävyyttä yleisillä tyypeillä.

Sovelluksia kehitettäessä on aina epävarmuutta, mikä voi johtaa virheisiin, varsinkin jos funktiot hyväksyvät tietyntyyppisiä argumentteja. Voit vähentää epävarmuustekijöistä johtuvia virheitä käyttämällä Generics-ohjelmaa. Generics tarjoaa toimintoja luokkien, funktioiden ja tietorakenteiden luomiseen erityyppisten kanssa työskentelyä varten.

Yleisten ominaisuuksien avulla voit luoda ja määrittää algoritmeja ja tietorakenteita, jotka voivat toimia useilla tyypeillä kirjoittamatta monimutkaista koodia ja erillisiä toteutuksia jokaiselle tyypille. Generics parantaa koodin uudelleenkäytettävyyttä ja tehokkuutta säilyttäen samalla tyypin turvallisuuden ja suorituskyvyn.

Yleisten tyyppien käyttö ruosteessa

Rustin yleinen tyyppi voi toimia yhdessä muut Rust-tietotyypit. Voit määrittää yleiset tyypit kulmasulkeilla (<>), joita seuraa vähintään kaksi parametria.

Tässä on yleinen rakenteen määritelmä joka vaatii kaksi yleistä tyyppiparametria:

instagram viewer
structKohta {
// T ja U ovat yleisiä parametreja, joita x- ja y-kentät käyttävät
// oletetaan ilmentymisestä
x: T,
y: U,
}

Vuonna Kohta rakenne, T, ja U ovat yleisiä tyyppiparametreja.

Voit korvata yleiset tyyppiparametrit millä tahansa tietotyypeillä toteutusvaiheessa:

fnpää() {
antaa minun_piste = Piste { x: merkkijono::from("Hei"), y: merkkijono::from("maailman") };

println!(
"Oma_pisteen x-arvo on {} ja y-arvo on {}.",
my_point.x,
minun_piste.y
);
}

The minun_piste muuttuja on esimerkki Kohta merkkijonotyypeillä alustettu struct. Rust-kääntäjä päättelee betonin tyypit T ja U instantiation arvojen perusteella.

Ominaisuusrajat yleisille tyypeille

Ruosteen yleistyypit voivat käyttää ominaisuusrajoja tyyppiturvallisuuden varmistamiseksi. Ominaisuudet ovat menetelmien kokoelmia, joita tyypit voivat toteuttaa osoittaakseen tiettyjä ominaisuudelle määritettyjä käyttäytymismalleja.

Piirrerajat määrittävät, että yleisen tyypin on toteutettava yksi tai useampi ominaisuus.

Tässä on esimerkki yleisestä funktiosta, joka palauttaa suuremman kahdesta arvosta ominaisuusrajoituksella, joka varmistaa, että verratut tyypit toteuttavat ominaisuuden:

// Maksimi on ominaisuus, joka määrittää menetelmän kahden maksimiarvon arvioimiseksi
// tyypit
piirreEnimmäismäärä {
fnmax(itse, muu: Itse) -> Itse;
}

// Toteuttaa "Maksimi"-ominaisuuden kaikille tyypeille, jotka toteuttavat
// "PartialOrd" -ominaisuus.
implPartialOrd> Maksimi varten T {
fnmax(itse, muu: Itse) -> Itse {
// palauttaa "itse", jos se on suurempi kuin "muut"; muuten palaa
// `muu.`
jositse > muut {
itse
} muu {
muu
}
}
}

fnpää() {
antaa a = 5;
antaa b = 10;
antaa suurin = Maksimi:: max (a, b);
println!("Suurin arvo on {}", suurin);
}

The Enimmäismäärä piirteellä on a max menetelmä, joka palauttaa suuremman kahdesta samantyyppisestä arvosta. Mikä tahansa tyyppi, joka toteuttaa PartialOrd ominaisuus toteuttaa Enimmäismäärä piirre.

The max menetelmä ottaa kaksi arvoa Itse tyyppi — viittaa tyypin toteuttavaan tyyppiin Enimmäismäärä ominaisuus — ja vertaa arvoja.

The pää funktio vertaa kahta muuttujaa käyttämällä max menetelmällä ja tulostaa suurimman.

Yleisten tyyppien rajoitukset

Rajoitukset ovat samanlaisia ​​kuin piirrerajat, mutta niiden avulla voit määrittää lisävaatimuksia tyypeille, joita käytät tyyppiparametreina.

Jos haluat luoda yleisen funktion, joka hyväksyy tyypit merkkijonon muuntamista varten, voit käyttää rajoitusta varmistaaksesi, että tyyppiparametri toteuttaa ominaisuuden.

// ToString on ominaisuus, jolla on merkkijonon muunnosmenetelmä
piirreToString {
fnmerkkijonoon(&itse) -> merkkijono;
}

// to_string on yleinen funktio, joka ottaa minkä tahansa tyyppisen arvon
// toteuttaa ToString-ominaisuuden
fnmerkkijonoonToString>(arvo: T) -> merkkijono {
value.to_string()
}

The merkkijonoon arvo-parametrin on toteutettava ToString ominaisuus, joka varmistaa, että voit muuntaa tyyppisiä arvoja T merkkijonoon kanssa merkkijonoon menetelmä.

Yleiset tyypit ovat hyödyllisiä piirteiden käsittelyssä

Ruosteen yleistyypit ovat tehokkaita, ja parantamisen varaa on. Kriittinen painopistealue on yleisen koodin suorituskyvyn parantaminen. Tällä hetkellä Rustin tyyppinen järjestelmä voi aiheuttaa yleistä koodia, mikä hidastaa suorituskykyä.

Yleistyypit ovat hyödyllisiä piirteiden kanssa työskentelyssä. Yleisten tyyppien avulla voit luoda ominaisuusobjekteja, jotka toimivat minkä tahansa ominaisuuden toteuttavan tyypin kanssa tehdäksesi menetelmistäsi joustavampia.