Mācīšanās par šiem diviem jēdzieniem palīdzēs nostiprināt izpratni par to, kā darbojas Rust un kā varat ieviest OOP funkcijas.

Īpašības un dzīves ilgums ir Rust galvenās sastāvdaļas. Varat izmantot pazīmes, lai definētu ieviešamo tipu uzvedību un iespējas. Tie ir ļoti daudzpusīgi, ļaujot rakstīt vispārīgāku kodu, samazināt dublēšanos un uzlabot apkopi.

Rust izmanto citu mehānismu — mūža ilgumu —, lai izsekotu īpašumtiesības uz mainīgajiem lielumiem darbības jomā un ārpus tās. Tas novērš norādes nokarināšanu mainīgas atdalīšanas laikā.

Iezīmes un kalpošanas laiks kopā palīdz nodrošināt tipa drošību, atmiņas drošību un koda uzticamību.

Rūsas iezīmju izpratne

Iezīmes ir metožu kopums, ko var īstenot citi veidi. Iezīmes ir līdzīgas saskarnes tādās valodās kā Java, Go un TypeScript, bet elastīgāks.

Jūs izmantosit īpašība atslēgvārds, lai definētu Rust iezīmes, kam seko metodes parakstu deklarācija.

īpašībaMyTrait {
fnmana_metode(&sevi);
}

Kods definē iezīmi ar nosaukumu MyTrait ar mana_metode metodi. The

instagram viewer
&sevis parametrs norāda, ka metode atsaucas uz īstenošanas tipa objektu kā savu pirmo parametru.

Pēc pazīmes definēšanas varat to ieviest saviem pielāgotajiem veidiem.

Lūk, kā jūs varat ieviest iezīmi saviem struktūras veidiem.

struktūraPersona {
nosaukums: Stīga,
vecums: u32,
}

impl Informācija priekš Persona {
fnkopsavilkums(&sevi) {
println!("Mani sauc {}, un man ir {} gadi.", sevi.name, sevi.vecums);
}
}

The Persona strukturēt darbarīkus Informācija, un jūs varat zvanīt uz kopsavilkums metode gadījumos Persona struktūra.

fngalvenais(){
ļaut Džons = Persona { vārds: Stīga::no("Džons"), vecums: 30 };
john.summary(); // Rezultāts: Mani sauc Jānis, un man ir 30 gadi.
}

The Džons mainīgais ir gadījums Persona struktūra.

The galvenais funkciju izsaukumiem kopsavilkums kas izdrukā ziņojumu konsolei:

Enums var īstenot iezīmes. Tālāk ir norādīts, kā varat definēt enumu ar variantiem, kas ievieš kopsavilkums metode:

enumMyEnum {
A variants,
B variants,
}

impl Informācija priekš MyEnum {
fnkopsavilkums(&sevi) {
atbilstsevi {
MyEnum:: VariantA => {
// VariantA ieviešana
}
MyEnum:: VariantB => {
// VariantB ieviešana
}
}
}
}

Pazīmju izmantošana funkciju parametriem un atdeves vērtībām

Pazīmes var izmantot kā funkciju parametrus un atgriešanas vērtības. Iezīmju izmantošana kā funkciju parametri ir ērta, lai rakstītu vispārīgu kodu ar vairākiem veidiem.

Šeit ir funkcija, kas ņem jebkura veida parametru, kas tiek ieviests Informācija.

fndari kaut ko(vērtība: T) {
value.summary();
}

The sintakse to nosaka T jāīsteno Informācija. Jūs varat zvanīt uz kopsavilkums funkcija ar jebkuru vērtību, kas tiek ieviesta Informācija.

Mūži Rūsā

Rust aizņemšanās pārbaudes rīks analizē programmas un nodrošina pareizu atmiņas izmantošanu. Rūsā, katrai vērtībai ir īpašnieks kas ir atbildīgs par vērtības sadali. Kad mainīgie aizņem vērtības, viņi aizņemas atsauci uz nodoto vērtību, bet īpašnieks saglabā īpašumtiesības.

Kalpošanas laiks ir veids, kā nodrošināt, ka aizņemtās vērtības tiek izmantotas pareizi. Mūžs ir atsaucei pievienota etiķete, kas apraksta, cik ilgi atsauce ir derīga.

Programmā Rust varat norādīt dzīves ilgumu, izmantojot apostrofa anotāciju:

func<'a>

Veidojot atsauci, atsaucei tiek piešķirts kalpošanas laiks, kas apraksta, cik ilgi tā ir derīga. Ja jums ir funkcija, kas izmanto atsauci uz vērtību, kalpošanas laikam ir jābūt garākam par funkcijas izsaukumu, lai nodrošinātu, ka vērtība ir derīga, kad funkcija atgriežas.

Šeit ir funkcijas kalpošanas laika specifikācijas piemērs.

fndari kaut ko<'a>(x: &'ai32) -> &'ai32 {
x
}

fngalvenais() {
ļaut x = 42;
ļaut rezultāts = do_something(&x);
println!("Rezultāts ir: {}", rezultāts);
}

Iekš dari kaut ko funkcija, 'a kalpošanas laika parametrs norāda, ka atsauce uz x ir spēkā tik ilgi, kamēr tiek izsaukta funkcija. Atgrieztā atsauce ir derīga arī tik ilgi, kamēr tiek izsaukta funkcija.

The galvenais funkcija izdrukā rezultātu, nododot atsauci uz x mainīgais galvenais funkciju konsolei.

Kalpošanas sintakse var būt detalizēta, taču tā ir būtiska drošības un atmiņas pārvaldībai. Trīs kalpošanas laika Elision noteikumi sniedz vadlīnijas, kas ļauj Rust noteikt atsauču kalpošanas laiku noteiktās situācijās.

Ievades mūža noteikums

Ievades kalpošanas laika noteikums norāda, ka, ja funkcija vai metode izmanto vienu vai vairākas atsauces kā ievades parametrus, Rust pieņem, ka visām atsaucēm ir vienāds kalpošanas laiks.

Vienkārši sakot, izvades atsauču kalpošanas laiks būs tāds pats kā ievades atsauču kalpošanas laiks.

fngarākais<'a>(x: &'astr, y: &'astr) -> &'astr {
ja x.len() > y.len() { x } cits {g}
}

Iekš garākais funkcija, Rust secina, ka izvades atsauces kalpošanas laiks ir tāds pats kā ievades atsaucei, jo tiem abiem ir viens un tas pats kalpošanas laika parametrs 'a.

Ievades kalpošanas laika noteikums atvieglo tādu vispārīgu funkciju rakstīšanu, kurās kā ievade tiek izmantotas vairākas atsauces.

Izvades kalpošanas laika noteikums

Izvades kalpošanas laika noteikums nosaka, ka, ja funkcija vai metode atgriež atsauci, Rust pieņems, ka izvades atsauces kalpošanas laiks atšķiras no jebkuras ievades atsauces kalpošanas laika.

fnpirmais_vārds<'a>(s: &'astr) -> &'astr {
s.split_whitespace().next().unwrap()
}

Šajā funkcijā Rust secina, ka izvades atsauces kalpošanas laiks atšķiras no ievades atsauces kalpošanas laika, jo split_whitespace() metode izveido izvades atsauci, kas neizmanto ievades atsauces parametrus.

Mūžu izslēgšanas noteikums

Kalpošanas laika noteikums tiek piemērots, ja funkcija vai metode izmanto vienu atsauci vai ievades parametru un atgriež atsauci. Tādā gadījumā Rust pieņem, ka izvades atsaucei ir tāds pats kalpošanas laiks kā ievades atsaucei.

fngarākais<'a>(x: &'astr, y: &str) -> &'astr {
ja x.len() > y.len() { x } cits {g}
}

Šajā funkcijā Rust secina, ka izvades atsauces kalpošanas laiks ir tāds pats kā ievades atsauces kalpošanas laiks, jo ievades atsauce y nav kalpošanas laika parametra. Rūsa atceļ kalpošanas laika parametru y un pieņem, ka tam ir tāds pats kalpošanas laiks kā x.

Šis noteikums atvieglo tādu funkciju rakstīšanu, kuras izmanto vienu ievades atsauci un atgriež vienu izvades atsauci.

Iezīmes un mūžs

Varat apvienot pazīmes un kalpošanas laiku, lai izveidotu vispārīgas funkcijas, kas darbojas tipiem, kas ievieš pazīmi un kuriem ir derīgs kalpošanas laiks.

Šeit ir pazīme un funkcija, kas atsaucas uz vērtību, kas ievieš pazīmi.

īpašībaToString {
fnto_string(&sevi) -> Stīga;
}

fnto_string<'a, T: ToString>(t: &'a T) -> Stīga {
t.to_string()
}

Šeit ir kalpošanas laika parametrs 'a nodrošina, ka atsauce t ir derīga visu tā objekta kalpošanas laiku, uz kuru tas atsaucas. Jūs varat izmantot to_string funkcija ar veidiem, kas ievieš ToString īpašība, kurai ir derīgs mūžs.

Iezīmes veido pamatu OOP koncepciju ieviešanai rūsā

Iezīmes ļauj definēt uzvedību. Lai gan Rust nav objektorientēta programmēšanas valoda (OOP), varat izmantot pazīmes, lai ieviestu OOP koncepcijas, sākot no iekapsulēšanas līdz mantojumam, polimorfismam un abstrakcijai.

Šo OOP koncepciju ieviešana ar iezīmēm padara jūsu Rust programmas mērogojamu, stabilu, uzturējamu un efektīvu.