Pochopenie enumov a párovania vzorov je v Rust zásadné. Preskúmajte efektívne techniky implementácie oboch.

Rust poskytuje rôzne typy údajov na vykonávanie operácií, od základných typov údajov, ako sú reťazce, celé čísla a plávajúce nasmerujte čísla na zložené typy údajov, ako sú vektory a polia, na zložené typy údajov, ako sú štruktúry a enumerácie.

Enums (enumerácie) je dátový typ, ktorý umožňuje reprezentáciu pevnej množiny hodnôt, ako sú dni v týždni a farba dúhy. Enumy sú užitočné, keď sú možné hodnoty premennej obmedzené a známe.

Definovanie enumov v Ruste

Deklarovanie enumov v Ruste je podobné ako deklarovanie enumov v C#. Budete používať enum kľúčové slovo za názvom a množinu zložených zátvoriek na definovanie enumerácií. Možné varianty (entity) v zložených zátvorkách môžete definovať čiarkou ako oddeľovačom.

Tu je zoznam dní v týždni:

enumPracovný deň {
pondelok,
utorok,
streda,
štvrtok,
piatok,
sobota,
nedeľa,
}

The Pracovný deň enum predstavuje dni v týždni. The varianty sú názvy dňa a nemajú žiadne súvisiace hodnoty. Tiež varianty vášho enum môžu byť ľubovoľné

instagram viewer
Typ údajov hrdza.

K variantom môžete pristupovať zadaním názvu variantu pomocou operátora oddeľovača cesty (::) v zozname.

nech deň = Deň v týždni:: pondelok;

// staticky napísaná verzia premennej `day`
nech deň: Deň v týždni = Deň v týždni:: Pondelok;

Kód určuje, že chcete získať prístup k pondelok variant výčtu dní v týždni.

Varianty a diskriminanty enumov

Varianty enum sú spojené s celočíselnými hodnotami tzv diskriminačný. Štandardne začínajú diskriminačné hodnoty od nuly a pre nasledujúce varianty sa zvyšujú o 1; je však možné zadať vlastné rozlišovacie hodnoty pre každý variant.

Tu je príklad zoznamu pracovných dní s variantmi s priradenou hodnotou.

enumPracovný deň {
pondelok = 1,
utorok = 2,
Streda = 3,
štvrtok = 4,
piatok = 5,
Sobota = 6,
Nedeľa = 7,
}

Výpočet dní v týždni má sedem variantov reprezentujúcich každý deň v týždni a každý deň má priradenú hodnotu (nazývanú diskriminant). Varianty sú v poradí od prvého do posledného dňa v týždni.

K diskriminačnej hodnote môžete pristupovať pomocou názvu variantu.

fnHlavná() {
println!("Pondelok: {}", Deň v týždni:: pondelok akoi32);
println!("Utorok: {}", Deň v týždni:: utorok akoi32);
println!("Streda: {}", Deň v týždni:: Streda akoi32);
println!("Štvrtok: {}", Deň v týždni:: štvrtok akoi32);
println!("Piatok: {}", Deň v týždni:: Piatok akoi32);
println!("Sobota: {}", Deň v týždni:: Sobota akoi32);
println!("Nedeľa: {}", Deň v týždni:: Nedeľa akoi32);
}

The println! makro sa používa na tlač diskriminantov. Každý println! vyvolanie makra má dva argumenty: formátovací reťazec a hodnotu. Formátovací reťazec určuje, ako formátovať výstup; hodnota je skutočná hodnota, ktorá sa vytlačí.

V tomto prípade je formátovací reťazec reťazcový literál, ktorý obsahuje názov dňa v týždni, a hodnota je variant enum s explicitným pretypovaním na i32 celočíselný typ.

Explicitné pretypovanie na i32 je nevyhnutné, pretože výčty Rust sú reprezentované ako celé čísla, ale konkrétny typ celého čísla závisí od veľkosti výčtu. Rust štandardne priraďuje najmenší typ celého čísla, ktorý môže reprezentovať všetky diskriminanty v enume. Ale v tomto prípade chcete vytlačiť hodnoty ako celé čísla i32, takže ich musíte explicitne pretypovať.

Tu je výsledok zo spustenia Hlavná funkcia:

Zhoda vzorov v hrdze

Zhoda vzorov je konštrukcia kontroly hrdze užitočná na identifikáciu vzorov údajov. Priraďovanie vzorov umožňuje písanie stručného a efektívneho kódu pri práci s pokročilé dátové štruktúry alebo vykonávanie zložitých operácií.

Budete používať zápas kľúčové slovo, za ktorým nasleduje => oddeľovač pre vzor a operáciu pre vzor. Vzorom môže byť akýkoľvek výraz Rust vrátane literálov, premenných a volaní funkcií.

Tu je príklad vyhlásenia o zhode:

fnHlavná(){
nech x = 5;
zápas X {
1 => println!("jeden"),
2 => println!("dva"),
3 => println!("tri"),

// sa spustí, ak sa žiadny zo vzorov nezhoduje
_ => println!("niečo iné"),
}
}

The Hlavná funkcie sa zhodujú X oproti niekoľkým vzorom a potom vytlačí hodnotu na základe hodnoty x. Vzor podčiarknutia (_) je vzor zástupného znaku, ktorý sa používa ako záchytný bod pre prípady, ktoré nie sú explicitne spracované.

Enums a Pattern Matching

Výčty a porovnávanie vzorov sú užitočné na vyjadrenie a prácu s pokročilými dátovými štruktúrami typovo bezpečným a efektívnym spôsobom. Výčty môžete použiť na definovanie pevnej množiny hodnôt a zhody vzorov, aby ste s týmito hodnotami pracovali.

Tu je zoznam farieb v dúhe:

enumRainbow {
červená,
oranžová,
Žltá,
Zelená,
Modrá,
indigo,
Fialový,
}

Každý variant Rainbow enum predstavuje farbu dúhy. Môžete použiť porovnanie vzorov s príkazom zhody na priradenie vzorov k variantu na riadenie toku programu na základe farby dúhy.

Tu je funkcia, ktorá prevezme farebný variant z enum Rainbow a vytlačí správu na základe farby.

fnfarba_tlače(farba: Rainbow) {
zápas farba {
Rainbow:: Červená => println!("Farba je červená!"),
Rainbow:: Orange => println!("Farba je oranžová!"),
Dúha:: Žltá => println!("Farba je žltá!"),
Rainbow:: Zelená => println!("Farba je zelená!"),
Rainbow:: Modrá => println!("Farba je modrá!"),
Rainbow:: Indigo => println!("Farba je indigová!"),
Rainbow:: Fialová => println!("Farba je fialová!"),
}
}

fnHlavná() {
nech farba = Rainbow:: Modrá;
farba_tlače (farba);
}

Môžete dostať varianty sa nikdy nekonštruujú alebo podobné upozornenia, keď sa pokúsite spustiť vyššie uvedený kód, pretože ostatné varianty okrem modrého variantu neboli v tomto kóde nikdy skonštruované. V tomto prípade teda môžete tieto upozornenia pokojne ignorovať, pretože sú zámerné.

The farba_tlače funkcia preberá parameter farby typu Enum Rainbow. Vyhlásenie o zhode sa zhoduje s farbou zo sady farieb, ktoré sú prístupné cez názvy variantov. Nakoniec sa správa vytlačí na základe zhodnej farby.

Porovnávanie vzorov môžete použiť pre zložité operácie, ako sú viaceré návratové hodnoty na základe podmienky.

fnvypočítať_vlnovú dĺžku(farba: Rainbow) -> u32 {
zápas farba {

Rainbow:: Červená => 700,
Rainbow:: Orange => 590,
Dúha:: Žltá => 570,
Rainbow:: Zelená => 510,
Rainbow:: Modrá => 475,
Rainbow:: Indigo => 445,
Rainbow:: Fialová => 400,
}
}

The vypočítať_vlnovú dĺžku funkcia berie ako parameter farebný variant typu Rainbow enum a vracia 32-bitové celé číslo bez znamienka, čo je vlnová dĺžka farby, ktorá sa zhoduje so vzorom.

Rust tiež poskytuje štruktúry na vytváranie vlastných typov

Enumy sú užitočné na definovanie vlastných typov pre niekoľko operácií, najmä v prípadoch, keď sú polia známe a určité.

Rust tiež poskytuje štruktúry, ktoré môžete použiť na vytvorenie vlastných typov s pomenovanými poľami. Na rozdiel od enumov vám štruktúry umožňujú definovať polia rôznych typov, ku ktorým môžete pristupovať a upravovať ich individuálne.