Sužinoję apie šias dvi sąvokas padėsite geriau suprasti, kaip veikia Rust ir kaip galite įdiegti OOP funkcijas.
Savybės ir gyvenimo trukmė yra pagrindiniai Rust komponentai. Galite naudoti bruožus, kad apibrėžtumėte tipų elgesį ir galimybes. Jie yra labai universalūs, todėl galite rašyti bendresnį kodą, sumažinti dubliavimą ir pagerinti priežiūrą.
Rust naudoja kitą mechanizmą – visą gyvenimą – kintamųjų nuosavybės teisei stebėti. Tai apsaugo nuo kabančios rodyklės kintamo paskirstymo metu.
Kartu bruožai ir tarnavimo laikas padeda užtikrinti tipo saugumą, atminties saugumą ir kodo patikimumą.
Rūdžių bruožų supratimas
Bruožai yra metodų, kuriuos gali įgyvendinti kiti tipai, rinkiniai. Savybės yra panašios į sąsajos tokiomis kalbomis kaip Java, Go ir TypeScript, bet lankstesnis.
Jūs naudosite bruožas raktinis žodis, skirtas apibrėžti Rust bruožus, po kurio pateikiamas metodo parašų deklaravimas.
bruožasManoTrait {
fnmano_metodas(&savarankiškai);
}
Kodas apibrėžia požymį, pavadintą ManoTrait su mano_metodas
metodas. The &savarankiškai parametras rodo, kad metodas nurodo įgyvendinimo tipo objektą kaip pirmąjį parametrą.Apibrėžę bruožą, galite jį pritaikyti savo pasirinktiems tipams.
Štai kaip galite pritaikyti bruožą savo struktūrų tipams.
struktūraAsmuo {
vardas: Styga,
amžius: u32,
}
impl Informacija dėl Asmuo {
fnsantrauka(&savarankiškai) {
println!("Mano vardas yra {} ir man {} metai.", savarankiškai.vardas, savarankiškai.amžius);
}
}
The Asmuo konstrukciniai padargai Informacija, ir galite paskambinti santrauka metodas Asmuo struktūra.
fnpagrindinis(){
leisti jonas = asmuo { vardas: Styga::nuo("Jonas"), amžius: 30 };
jonas.sumary(); // Išvestis: Mano vardas Jonas, man 30 metų.
}
The jonas kintamasis yra pavyzdys Asmuo struktūra.
The pagrindinis funkcijų skambučiai santrauka kuri išspausdina pranešimą į konsolę:
Enumai gali įgyvendinti bruožus. Štai kaip galite apibrėžti sąrašą su variantais, kurie įgyvendina santrauka metodas:
enumMano Enum {
A variantas,
B variantas,
}
impl Informacija dėl MyEnum {
fnsantrauka(&savarankiškai) {
rungtynėssavarankiškai {
MyEnum:: VariantA => {
// VariantA diegimas
}
MyEnum:: VariantB => {
// VariantB diegimas
}
}
}
}
Požymių naudojimas funkcijų parametrams ir grąžinimo reikšmėms
Galite naudoti bruožus kaip funkcijų parametrus ir grąžinti reikšmes. Naudoti bruožus kaip funkcijų parametrus patogu rašant kelių tipų bendrąjį kodą.
Čia yra funkcija, kuri paima bet kokio tipo parametrą, kuris įgyvendinamas Informacija.
fnką nors padaryti(vertė: T) {
value.summary();
}
The sintaksė tai nurodo T turi įgyvendinti Informacija. Galite skambinti santrauka funkcija su bet kokia reikšme, kuri įgyvendinama Informacija.
Visą gyvenimą rūdyje
„Rust“ skolinimosi tikrinimo įrankis analizuoja programas ir užtikrina tinkamą atminties naudojimą. Rūdyje, kiekviena vertybė turi savininką kuri yra atsakinga už vertės paskirstymą. Kada kintamieji skolinasi reikšmes, jie pasiskolina nuorodą į perduotą vertę, tačiau savininkas išlaiko nuosavybės teisę.
Gyvenimo trukmė yra būdas užtikrinti, kad pasiskolintos vertės būtų naudojamos teisingai. Visas gyvenimas – tai prie nuorodos pritvirtinta etiketė, nurodanti, kiek laiko nuoroda galioja.
„Rust“ galite nurodyti visą gyvenimą naudodami apostrofo anotaciją:
funkcija <'a>
Kuriant nuorodą, nuorodai priskiriamas galiojimo laikas, nurodantis, kiek laiko ji galioja. Jei turite funkciją, kuri naudoja nuorodą į reikšmę, veikimo trukmė turi būti ilgesnė nei funkcijos iškvietimo, kad būtų užtikrinta, jog reikšmė galioja, kai funkcija grįžta.
Štai funkcijos veikimo trukmės specifikacijos pavyzdys.
fnką nors padaryti<'a>(x: &'ai32) -> &'ai32 {
x
}
fnpagrindinis() {
leisti x = 42;
leisti rezultatas = do_something(&x);
println!("Rezultatas yra: {}", rezultatas);
}
Viduje ką nors padaryti funkcija, 'a veikimo trukmės parametras rodo, kad nuoroda į x galioja tol, kol iškviečiama funkcija. Grąžinta nuoroda taip pat galioja tol, kol iškviečiama funkcija.
The pagrindinis funkcija išspausdina rezultatą, perduodama nuorodą į x kintamasis pagrindinis funkcija prie konsolės.
Visą gyvenimą trunkanti sintaksė gali būti žodinė, tačiau ji būtina saugos ir atminties valdymui. Trijų gyvavimo trukmės pašalinimo taisyklės pateikia gaires, leidžiančias Rust nustatyti nuorodų naudojimo trukmę tam tikrose situacijose.
Įvesties trukmės taisyklė
Įvesties trukmės taisyklė nurodo, kad jei funkcija arba metodas naudoja vieną ar daugiau nuorodų kaip įvesties parametrus, Rust daro prielaidą, kad visų nuorodų veikimo laikas yra toks pat.
Paprasčiau tariant, išvesties nuorodų tarnavimo laikas bus toks pat kaip ir įvesties nuorodų.
fnilgiausias<'a>(x: &'ag, y: &'ag) -> &'ag {
jeigu x.len() > y.len() { x } Kitas { m }
}
Viduje ilgiausias funkcija, Rust daro išvadą, kad išvesties nuorodos tarnavimo laikas yra toks pat kaip įvesties nuorodos, nes jie abu turi tą patį veikimo trukmės parametrą 'a.
Įvesties naudojimo trukmės taisyklė leidžia lengvai rašyti bendrąsias funkcijas, į kurias įvesti naudojamos kelios nuorodos.
Išvesties naudojimo trukmės taisyklė
Išvesties trukmės taisyklė nurodo, kad jei funkcija arba metodas grąžina nuorodą, Rust darys prielaidą, kad išvesties nuorodos gyvavimo trukmė skiriasi nuo bet kurios įvesties nuorodos gyvavimo trukmės.
fnpirmasis_žodis<'a>(s: &'ag) -> &'ag {
s.split_whitespace().next().unwrap()
}
Šioje funkcijoje Rust daro išvadą, kad išvesties nuorodos tarnavimo laikas skiriasi nuo įvesties nuorodos gyvavimo trukmės, nes split_whitespace() metodas sukuria išvesties nuorodą, kuri nepriima įvesties atskaitos parametrų.
Gyvenimo panaikinimo taisyklė
Galiojimo laiko panaikinimo taisyklė taikoma, jei funkcija arba metodas naudoja vieną nuorodą arba įvesties parametrą ir grąžina nuorodą. Tokiu atveju Rust daro prielaidą, kad išvesties nuoroda galioja tiek pat, kiek ir įvesties nuoroda.
fnilgiausias<'a>(x: &'ag, y: &g) -> &'ag {
jeigu x.len() > y.len() { x } Kitas { m }
}
Šioje funkcijoje Rust daro išvadą, kad išvesties nuorodos tarnavimo laikas yra toks pat kaip įvesties nuorodos gyvavimo laikas, nes įvesties nuoroda y neturi gyvenimo trukmės parametro. Rūdys pašalina eksploatavimo trukmės parametrą y ir daroma prielaida, kad jo tarnavimo laikas yra toks pat kaip x.
Ši taisyklė leidžia lengviau rašyti funkcijas, kurios paima vieną įvesties nuorodą ir grąžina vieną išvesties nuorodą.
Savybės ir gyvenimo trukmė
Galite derinti bruožus ir naudojimo trukmę, kad sukurtumėte bendrąsias funkcijas, kurios tinka tipams, kurie įgyvendina bruožą ir turi galiojantį gyvenimą.
Čia yra bruožas ir funkcija, nurodanti reikšmę, kuri įgyvendina bruožą.
bruožasToString {
fnto_string(&savarankiškai) -> Styga;
}
fnto_string<'a, T: ToString>(t: &'a T) -> Styga {
t.to_string()
}
Čia gyvenimo trukmės parametras 'a užtikrina, kad nuoroda t galioja visą objekto, kuriame nurodoma, gyvavimo laiką. Galite naudoti to_string funkcija su tipais, kurie įgyvendina ToString bruožas, turintis galiojantį gyvenimą.
Bruožai sudaro OOP koncepcijų įgyvendinimo rūdyje pagrindą
Savybės leidžia apibrėžti elgesį. Nors Rust nėra į objektą orientuota programavimo kalba (OOP), galite naudoti bruožus, kad įgyvendintumėte OOP koncepcijas nuo inkapsuliavimo iki paveldėjimo, polimorfizmo ir abstrakcijos.
Įdiegus šias OOP koncepcijas su savybėmis, jūsų Rust programos tampa keičiamos, patikimos, prižiūrimos ir efektyvios.