Samaziniet savu Rust koda nospiedumu un palieliniet tā noturību, izmantojot vispārīgus veidus.

Lietojumprogrammu izstrādes laikā vienmēr pastāv nenoteiktības līmeņi, kas var izraisīt kļūdas, īpaši, ja jūsu funkcijas pieņem noteikta veida argumentus. Lai samazinātu kļūdas nenoteiktības dēļ, varat izmantot programmu Generics. Generics nodrošina funkcionalitāti, lai izveidotu klases, funkcijas un datu struktūras darbam ar dažādiem veidiem.

Izmantojot vispārīgos līdzekļus, varat izveidot un definēt algoritmus un datu struktūras, kas var darboties vairākos veidos, nerakstot sarežģītu kodu un atsevišķas implementācijas katram tipam. Generics uzlabo koda atkārtotu izmantošanu un efektivitāti, vienlaikus saglabājot tipa drošību un veiktspēju.

Vispārīgo veidu izmantošana rūsā

Rust vispārīgais tips var sadarboties ar citi Rust datu veidi. Jūs definēsit vispārīgos veidus ar leņķa iekavām (<>), kam seko divi vai vairāki parametri.

Šeit ir vispārīgs struktūras definīcija kam nepieciešami divi vispārīgi tipa parametri:

instagram viewer
struktūraPunkts {
// T un U ir vispārīga tipa parametri, kurus izmantos x un y lauki
// pieņemt par instantiāciju
x: T,
y: U,
}

Iekš Punkts struktūra, T, un U ir vispārīgi tipa parametri.

Instantiācijas laikā vispārīgo tipu parametrus var aizstāt ar jebkuru datu tipu:

fngalvenais() {
ļaut mans_punkts = Punkts { x: Stīga::no("Sveiki"), y: Stīga::no("pasaule") };

println!(
"Mana_punkta x vērtība ir {} un y vērtība ir {}.",
mans_punkts.x,
mans_punkts.y
);
}

The mans_punkts mainīgais ir gadījums Punkts struktūra inicializēta ar virkņu veidiem. Rust kompilators secina betona veidus T un U pamatojoties uz instantiācijas vērtībām.

Iezīmju robežas vispārīgajiem tipiem

Rūsas vispārīgie veidi var izmantot pazīmju robežas, lai nodrošinātu tipa drošību. Pazīmes ir metožu kopums, ko tipi var ieviest, lai parādītu noteiktai pazīmei definētu uzvedību.

Iezīmju robežas norāda, ka vispārīgajam tipam ir jāievieš viena vai vairākas pazīmes.

Tālāk ir sniegts vispārīgas funkcijas piemērs, kas atgriež lielāko no divām vērtībām ar iezīmi, kas nodrošina, ka salīdzinātie veidi ievieš pazīmi:

// Maksimums ir īpašība, kas definē metodi maksimālā divu novērtēšanai
// veidi
īpašībaMaksimums {
fnmaks(sevi, cits: Pats) -> Pats;
}

// Ievieš īpašību "Maksimums" visiem veidiem, kas ievieš
// `PartialOrd` iezīme.
implPartialOrd> Maksimālais priekš T {
fnmaks(sevi, cits: Pats) -> Pats {
// atgriež `pats`, ja tas ir lielāks par `citu`; pretējā gadījumā atgriezieties
// `cits.`
jasevi > cits {
sevi
} cits {
cits
}
}
}

fngalvenais() {
ļaut a = 5;
ļaut b = 10;
ļaut lielākais = Maksimums:: max (a, b);
println!("Lielākā vērtība ir {}", lielākais);
}

The Maksimums īpašībai piemīt a maks metode, kas atgriež lielāko no divām viena veida vērtībām. Jebkurš veids, kas ievieš PartialOrd iezīme īsteno Maksimums īpašība.

The maks metode ņem divas vērtības Pats tips — attiecas uz tipu, kas īsteno Maksimums īpašība — un salīdzina vērtības.

The galvenais funkcija salīdzina divus mainīgos, izmantojot maks metodi un izdrukā lielāko.

Ierobežojumi vispārīgajiem veidiem

Ierobežojumi ir līdzīgi pazīmju robežām, taču tie ļauj norādīt papildu prasības tiem veidiem, kurus izmantojat kā tipa parametrus.

Ja vēlaties izveidot vispārīgu funkciju, kas pieņem tipus virknes konvertēšanai, varat izmantot ierobežojumu, lai nodrošinātu, ka tipa parametrs ievieš pazīmi.

// ToString ir iezīme ar virknes konvertēšanas metodi
īpašībaToString {
fnto_string(&sevi) -> Stīga;
}

// to_string ir vispārīga funkcija, kas ņem jebkura veida vērtību
// ievieš ToString pazīmi
fnto_stringToString> (vērtība: T) -> Stīga {
value.to_string()
}

The to_string vērtības parametram ir jāievieš ToString īpašība, kas nodrošina, ka varat konvertēt tipa vērtības T uz virkni ar to_string metodi.

Vispārējie veidi ir noderīgi darbam ar iezīmēm

Rūsas vispārīgie veidi ir spēcīgi, un ir jomas, kas jāuzlabo. Galvenā uzmanības centrā ir vispārējā koda veiktspējas uzlabošana. Pašlaik Rust tipa sistēma var radīt papildu izmaksas vispārējam kodam, palēninot veiktspēju.

Vispārīgie veidi ir noderīgi darbam ar iezīmēm. Izmantojot vispārīgos tipus, varat izveidot pazīmju objektus, kas darbojas ar jebkuru veidu, kas ievieš pazīmi, lai padarītu metodes elastīgākas.