Vähendage oma Rust-koodi jalajälge ja suurendage selle vastupidavust üldiste tüüpide abil.

Rakenduste arendamisel esineb alati ebakindlust, mis võib põhjustada vigu, eriti kui teie funktsioonid aktsepteerivad teatud tüüpi argumente. Ebakindlusest tingitud vigade vähendamiseks võite kasutada rakendust Generics. Generics pakub funktsioone klasside, funktsioonide ja andmestruktuuride loomiseks erinevate tüüpidega töötamiseks.

Kasutades üldisi, saate luua ja määratleda algoritme ja andmestruktuure, mis võivad töötada mitmel tüübil ilma keerulist koodi kirjutamata ja iga tüübi jaoks eraldi rakendusi. Generics parandab koodi korduvkasutatavust ja tõhusust, säilitades samas tüübi ohutuse ja jõudluse.

Üldiste tüüpide kasutamine roostes

Rooste üldine tüüp võib koos töötada muud rooste andmetüübid. Üldised tüübid saate määratleda nurksulgudega (<>), millele järgneb kaks või enam parameetrit.

Siin on üldine struktuuri määratlus mis võtab kaks üldist tüüpi parameetrit:

struktuurPunkt {
// T ja U on üldtüüpi parameetrid, mida väljad x ja y teevad
// oletada esinemise kohta
x: T,
y: U,
}
instagram viewer

Aastal Punkt struktuur, T, ja U on üldised tüübiparameetrid.

Üldise tüübi parameetrid saate asendada mis tahes andmetüübiga.

fnpeamine() {
lase minu_punkt = Punkt { x: String::from("Tere"), y: String::from("maailm") };

println!(
"Minu_punkti x väärtus on {} ja y väärtus on {}.",
minu_punkt.x,
minu_punkt.y
);
}

The minu_punkt muutuja on eksemplar Punkt stringitüüpidega lähtestatud struktuur. Rooste kompilaator järeldab betooni tüübid T ja U põhinevad instantseerimise väärtustel.

Üldtüüpide tunnuste piirid

Rooste üldised tüübid võivad tüübi ohutuse tagamiseks kasutada tunnuste piire. Tunnused on meetodite kogumid, mida tüübid saavad rakendada, et näidata teatud tunnuse jaoks määratletud käitumist.

Tunnuste piirid määravad, et üldine tüüp peab rakendama ühte või mitut tunnust.

Siin on näide üldisest funktsioonist, mis tagastab kahest väärtusest suurema tunnusjoonega, mis tagab, et võrreldavad tüübid rakendavad tunnust:

// Maksimum on tunnus, mis määratleb meetodi kahe maksimumi hindamiseks
// tüübid
omadusMaksimaalne {
fnmax(ise, muu: Ise) -> Ise;
}

// Rakendab tunnuse "Maksimaalne" kõikidele tüüpidele, mis rakendavad
// `PartialOrd` tunnus.
implPartialOrd> Maksimaalne jaoks T {
fnmax(ise, muu: Ise) -> Ise {
// tagastab `ise`, kui see on suurem kui `muu`; muidu tagasi
// `muu.`
kuiise > muu {
ise
} muidu {
muud
}
}
}

fnpeamine() {
lase a = 5;
lase b = 10;
lase suurim = Maksimaalne:: max (a, b);
println!("Suurim väärtus on {}", suurim);
}

The Maksimaalne omadusel on a max meetod, mis tagastab kahest sama tüüpi väärtusest suurema. Mis tahes tüüpi, mis rakendab PartialOrd omadus rakendab Maksimaalne omadus.

The max meetod võtab kaks väärtust Ise tüüp – viidates tüübile, mis rakendab Maksimaalne tunnus — ja võrdleb väärtusi.

The peamine funktsioon võrdleb kahte muutujat kasutades max meetodil ja prindib suurima.

Piirangud üldistele tüüpidele

Piirangud on sarnased tunnuse piiridega, kuid võimaldavad teil määrata lisanõudeid tüüpidele, mida kasutate tüübiparameetritena.

Kui soovite luua üldise funktsiooni, mis aktsepteerib stringi teisendamiseks tüüpe, saate piirangu abil tagada, et tüübiparameeter rakendab tunnuse.

// ToString on stringi teisendusmeetodiga tunnus
omadusToString {
fnto_string(&ise) -> String;
}

// to_string on üldine funktsioon, mis võtab mis tahes tüüpi väärtuse
// rakendab omadust ToString
fnto_stringToString>(väärtus: T) -> String {
value.to_string()
}

The to_string väärtus parameeter peab rakendama ToString tunnus, mis tagab, et saate teisendada tüüpi väärtusi T string koos to_string meetod.

Üldised tüübid on kasulikud tunnustega töötamiseks

Rooste üldised tüübid on võimsad ja seal on arengukohti. Kriitiline valdkond on üldise koodi jõudluse parandamine. Praegu võib Rust'i tüüpi süsteem üldisele koodile lisakulusid tekitada, aeglustades jõudlust.

Üldised tüübid on kasulikud tunnustega töötamiseks. Kasutades üldtüüpe, saate luua tunnusobjekte, mis töötavad mis tahes tüüpi, mis tunnust rakendavad, et muuta teie meetodid paindlikumaks.