Nende kahe kontseptsiooni tundmaõppimine aitab tugevdada teie arusaamist sellest, kuidas Rust töötab ja kuidas saate OOP-i funktsioone rakendada.
Omadused ja eluiga on Rusti põhikomponendid. Tunnuste abil saate määratleda tüüpide käitumist ja võimalusi, mida rakendada. Need on väga mitmekülgsed, võimaldades teil kirjutada üldisemat koodi, vähendada dubleerimist ja parandada hooldatavust.
Rust kasutab teist mehhanismi – eluiga –, et jälgida muutujate omandiõigust kohaldamisalas ja väljaspool. See hoiab ära osutite rippumise muutuja eraldamise ajal.
Tunnused ja eluiga aitavad üheskoos tagada tüübi ohutuse, mälu ohutuse ja koodi usaldusväärsuse.
Rooste tunnuste mõistmine
Tunnused on meetodite kogumid, mida teised tüübid saavad rakendada. Omadused on sarnased liidesed sellistes keeltes nagu Java, Go ja TypeScript, kuid paindlikum.
Sa kasutad omadus märksõna Rusti tunnuste määratlemiseks, millele järgneb meetodi signatuuride deklaratsioon.
omadusMyTrait {
fnminu_meetod(&ise);
}
Kood määratleb tunnuse nimega
MyTrait koos minu_meetod meetod. The &ise parameeter näitab, et meetod viitab esimese parameetrina rakendustüübi objektile.Pärast tunnuse määratlemist saate seda oma kohandatud tüüpide jaoks rakendada.
Siit saate teada, kuidas saate oma struktuuritüüpide jaoks tunnuse rakendada.
struktuurIsik {
nimi: String,
vanus: u32,
}
impl Info jaoks Isik {
fnkokkuvõte(&ise) {
println!("Minu nimi on {} ja ma olen {} aastat vana.", ise.name, ise.vanus);
}
}
The Isik konstruktsiooni tööriistad Infoja saate helistada kokkuvõte meetod juhtumite puhul Isik struktuur.
fnpeamine(){
lase john = Isik { nimi: String::from("John"), vanus: 30 };
john.summary(); // Väljund: Minu nimi on John ja ma olen 30-aastane.
}
The John muutuja on eksemplar Isik struktuur.
The peamine funktsioonikutsed kokkuvõte mis prindib konsooli sõnumi:
Enumid võivad tunnuseid rakendada. Siit saate teada, kuidas saate määratleda loendi variantidega, mis rakendavad kokkuvõte meetod:
enumMinuEnum {
Variant A,
Variant B,
}
impl Info jaoks MinuEnum {
fnkokkuvõte(&ise) {
vasteise {
MinuEnum:: VariantA => {
// teostus VariantA jaoks
}
MinuEnum:: VariantB => {
// teostus VariantB jaoks
}
}
}
}
Tunnuste kasutamine funktsiooniparameetrite ja tagastusväärtuste jaoks
Saate kasutada tunnuseid funktsiooni parameetrite ja tagastatavate väärtustena. Tunnuste kasutamine funktsiooni parameetritena on mugav mitut tüüpi üldise koodi kirjutamiseks.
Siin on funktsioon, mis võtab mis tahes tüüpi parameetri, mida rakendatakse Info.
fntee midagi(väärtus: T) {
väärtus.summary();
}
The süntaks määrab selle T peab rakendama Info. Võite helistada kokkuvõte funktsiooni mis tahes väärtusega, mis rakendab Info.
Eluaeg Roostes
Rusti laenukontrolli tööriist analüüsib programme ja tagab õige mälukasutuse. Roostes, igal väärtusel on omanik mis vastutab väärtuse jaotamise eest. Millal muutujad laenavad väärtusi, nad laenavad viite edasi antud väärtusele, kuid omanikule jääb omandiõigus.
Eluajad on viis tagada, et laenatud väärtusi kasutatakse õigesti. Eluaeg on viitele lisatud silt, mis kirjeldab, kui kaua viide kehtib.
Roostes saate eluea määrata apostroofmärkuse abil:
func<'a>
Viite loomisel määratakse viitele eluiga, mis kirjeldab, kui kaua see kehtib. Kui teil on funktsioon, mis kasutab väärtusele viidet, peab eluiga olema pikem kui funktsiooni kutse, et tagada väärtuse kehtivus funktsiooni tagastamisel.
Siin on näide funktsiooni eluaegsest spetsifikatsioonist.
fntee midagi<'a>(x: &'ai32) -> &'ai32 {
x
}
fnpeamine() {
lase x = 42;
lase tulemus = do_something(&x);
println!("Tulemus on: {}", tulemus);
}
Aastal tee midagi funktsioon, 'a eluiga parameeter näitab, et viide x kehtib nii kaua kui funktsiooni kutse. Tagastatud viide kehtib ka nii kaua, kuni funktsiooni väljakutse.
The peamine funktsioon prindib tulemuse, edastades viite x muutuja peamine funktsiooni konsooli külge.
Eluaegne süntaks võib olla paljusõnaline, kuid see on ohutuse ja mälu haldamise jaoks hädavajalik. Kolme elueaga eliseerimisreeglid annavad juhised, mis võimaldavad Rustil teatud olukordades järeldada viidete eluiga.
Sisend eluea reegel
Sisend eluea reegel määrab, et kui funktsioon või meetod võtab sisendparameetritena ühe või mitu viidet, eeldab Rust, et kõigil viidetel on sama eluiga.
Lihtsamalt öeldes on väljundviidete eluiga sama, mis sisendviidetel.
fnpikim<'a>(x: &'astr, y: &'astr) -> &'astr {
kui x.len() > y.len() { x } muidu { a }
}
Aastal pikim funktsioon, Rust järeldab, et väljundi viiteväärtus on sama mis sisendviite kasutusiga, kuna mõlemal on sama eluea parameeter 'a.
Sisestuse eluea reegel muudab mitme viidet kasutavate üldiste funktsioonide kirjutamise lihtsaks.
Väljundi eluea reegel
Väljundi eluea reegel määrab, et kui funktsioon või meetod tagastab viite, eeldab Rust, et väljundviite eluiga erineb mis tahes sisendviite elueast.
fnesimene_sõna<'a>(s: &'astr) -> &'astr {
s.split_whitespace().next().unwrap()
}
Selles funktsioonis järeldab Rust, et väljundi viite eluiga erineb sisendviite elueast, kuna split_whitespace() meetod loob väljundviite, mis ei võta sisendviite parameetreid.
Eluaegse kaotamise reegel
Eluea reegel rakendub siis, kui funktsioon või meetod võtab ühe viite või sisendparameetri ja tagastab viite. Sel juhul eeldab Rust, et väljundviitel on sama eluiga kui sisendviitel.
fnpikim<'a>(x: &'astr, y: &str) -> &'astr {
kui x.len() > y.len() { x } muidu { a }
}
Selles funktsioonis järeldab Rust, et väljundi viiteväärtus on sama, mis sisendviite eluiga, kuna sisendi viide y sellel pole eluea parameetrit. Rooste kaotab eluea parameetri y ja eeldab, et selle eluiga on sama kui x.
See reegel muudab lihtsamaks selliste funktsioonide kirjutamise, mis võtavad ühe sisendviite ja tagastavad ühe väljundviite.
Omadused ja eluiga
Saate kombineerida tunnuseid ja eluiga, et luua üldfunktsioone, mis töötavad tüüpide puhul, mis rakendavad tunnust ja millel on kehtiv kasutusiga.
Siin on tunnus ja funktsioon, mis viitavad seda tunnust rakendavale väärtusele.
omadusToString {
fnto_string(&ise) -> String;
}
fnto_string<'a, T: ToString>(t: &'a T) -> String {
t.to_string()
}
Siin on eluea parameeter 'a tagab, et viide t kehtib selle objekti eluea jooksul, millele see viitab. Võite kasutada to_string funktsiooni tüüpidega, mis rakendavad ToString tunnus, millel on kehtiv eluiga.
Omadused moodustavad aluse OOP-kontseptsioonide juurutamisel roostes
Tunnused võimaldavad teil käitumist määratleda. Kuigi Rust ei ole objektorienteeritud programmeerimiskeel (OOP), saate tunnuseid kasutada OOP-kontseptsioonide rakendamiseks alates kapseldamisest kuni pärimise, polümorfismi ja abstraktsioonini.
Nende OOP-kontseptsioonide rakendamine tunnustega muudab teie Rust-programmid skaleeritavaks, töökindlaks, hooldatavaks ja tõhusaks.