Zrozumienie wyliczeń i dopasowywania wzorców ma fundamentalne znaczenie w Rust. Poznaj skuteczne techniki wdrażania obu z nich.

Rust udostępnia różne typy danych do wykonywania operacji, od podstawowych typów danych, takich jak łańcuchy znaków, liczby całkowite i zmiennoprzecinkowe liczby punktowe do złożonych typów danych, takich jak wektory i tablice, do złożonych typów danych, takich jak struktury i wyliczenia.

Wyliczenia (wyliczenia) to typ danych, który umożliwia reprezentację stałego zestawu wartości, takich jak dni tygodnia i kolor tęczy. Wyliczenia są przydatne, gdy możliwe wartości zmiennej są ograniczone i znane.

Definiowanie wyliczeń w Rust

Deklarowanie wyliczeń w Rust jest podobne do deklarowanie wyliczeń w C#. Użyjesz wyliczenie słowo kluczowe po nazwie i zestaw nawiasów klamrowych do definiowania wyliczeń. Możesz zdefiniować możliwe warianty (obiekty) w nawiasach klamrowych z przecinkiem jako separatorem.

Oto zestawienie dni tygodnia:

wyliczenieDzień powszedni {
Poniedziałek,
Wtorek,
Środa,
Czwartek,
Piątek,
Sobota,
Niedziela,
}
instagram viewer

The Dzień powszedni enum reprezentuje dni tygodnia. The warianty są nazwami dnia i nie mają powiązanych wartości. Również warianty Twojego wyliczenia mogą być dowolne Typ danych rdzy.

Możesz uzyskać dostęp do wariantów, określając nazwę wariantu za pomocą separatora ścieżki (::) operatora w wyliczeniu.

pozwalać dzień = dzień tygodnia:: poniedziałek;

// statycznie typowana wersja zmiennej `day`
pozwalać dzień: Dzień tygodnia = Dzień tygodnia:: Poniedziałek;

Kod określa, że ​​chcesz uzyskać dostęp do Poniedziałek wariant wyliczenia dnia tygodnia.

Warianty i wyróżniki wyliczeń

Warianty wyliczenia są powiązane z wartościami całkowitymi o nazwie dyskryminujący. Domyślnie wartości wyróżników zaczynają się od zera i są zwiększane o 1 dla kolejnych wariantów; jednak możliwe jest określenie niestandardowych wartości wyróżniających dla każdego wariantu.

Oto przykład wyliczenia dnia tygodnia z wariantami z przypisaną wartością.

wyliczenieDzień powszedni {
poniedziałek = 1,
wtorek = 2,
środa = 3,
czwartek = 4,
piątek = 5,
sobota = 6,
niedziela = 7,
}

Wyliczenie dni tygodnia ma siedem wariantów reprezentujących każdy dzień tygodnia, a każdy dzień ma przypisaną wartość (zwaną wyróżnikiem). Warianty są w kolejności od pierwszego do ostatniego dnia tygodnia.

Dostęp do wartości dyskryminacyjnej można uzyskać za pomocą nazwy wariantu.

przypgłówny() {
drukuj!("Poniedziałek: {}", Dzień powszedni:: Poniedziałek Jaki32);
drukuj!("Wtorek: {}", Dzień powszedni:: Wtorek Jaki32);
drukuj!("Środa: {}", Dzień powszedni:: Środa Jaki32);
drukuj!("Czwartek: {}", Dzień powszedni:: Czwartek Jaki32);
drukuj!("Piątek: {}", Dzień powszedni:: Piątek Jaki32);
drukuj!("Sobota: {}", Dzień powszedni:: Sobota Jaki32);
drukuj!("Niedziela: {}", Dzień powszedni:: Niedziela Jaki32);
}

The drukuj! makro służy do drukowania wyróżników. Każdy println! wywołanie makra przyjmuje dwa argumenty: łańcuch formatu i wartość. Ciąg formatu określa sposób formatowania danych wyjściowych; wartość jest rzeczywistą wartością, która jest drukowana.

W tym przypadku łańcuch formatujący jest literałem łańcuchowym zawierającym nazwę dnia tygodnia, a wartością jest wariant enum z wyraźnym rzutowaniem na i32 typ całkowity.

Wyraźne rzutowanie na i32 jest konieczne, ponieważ wyliczenia w Rust są reprezentowane jako liczby całkowite, ale konkretny typ liczb całkowitych zależy od rozmiaru wyliczenia. Domyślnie Rust przypisuje najmniejszą liczbę całkowitą, która może reprezentować wszystkie wyróżniki w wyliczeniu. Ale w tym przypadku chcesz wydrukować wartości jako liczby całkowite i32, więc musisz je jawnie rzucić.

Oto wynik z uruchomienia główny funkcjonować:

Dopasowanie wzorów w Rust

Dopasowywanie wzorców to konstrukcja struktury kontrolnej Rust, przydatna do identyfikowania wzorców danych. Dopasowywanie wzorców umożliwia pisanie zwięzłego i wydajnego kodu podczas pracy z zaawansowane struktury danych lub wykonywania skomplikowanych operacji.

Użyjesz mecz słowo kluczowe, po którym następuje => odpowiednio separator dla wzorca i operacja dla wzorca. Wzorzec może być dowolnym wyrażeniem Rusta, w tym literałami, zmiennymi i wywołaniami funkcji.

Oto przykładowa instrukcja dopasowania:

przypgłówny(){
pozwalać x = 5;
mecz X {
1 => drukuj!("jeden"),
2 => drukuj!("dwa"),
3 => drukuj!("trzy"),

// działa, jeśli żaden z wzorców nie pasuje
_ => drukuj!("coś innego"),
}
}

The główny pasujące funkcje X względem kilku wzorców, a następnie drukuje wartość na podstawie wartości x. Wzorzec podkreślenia (_) jest wzorcem symboli wieloznacznych, który jest używany jako przechwytywanie wszystkich przypadków, które nie są jawnie obsługiwane.

Wyliczenia i dopasowywanie wzorców

Wyliczenia i dopasowywanie wzorców są przydatne do wyrażania i pracy z zaawansowanymi strukturami danych w bezpieczny i wydajny sposób. Możesz użyć wyliczeń, aby zdefiniować stały zestaw wartości i dopasować wzorce do pracy z tymi wartościami.

Oto wyliczenie kolorów tęczy:

wyliczenieTęcza {
Czerwony,
Pomarańczowy,
Żółty,
Zielony,
Niebieski,
Indygo,
Fioletowy,
}

Każdy wariant tzw Tęcza enum reprezentuje kolor tęczy. Możesz użyć dopasowywania wzorców z instrukcją dopasowania, aby dopasować wzorce do wariantu, aby sterować przepływem programu na podstawie koloru tęczy.

Oto funkcja, która pobiera wariant koloru z wyliczenia Rainbow i drukuje komunikat na podstawie koloru.

przypkolor_druku(kolor: tęczowy) {
mecz kolor {
Tęcza:: Czerwona => drukuj!(„Kolor jest czerwony!”),
Tęcza:: Pomarańczowy => drukuj!(„Kolor jest pomarańczowy!”),
Tęczowy:: Żółty => drukuj!(„Kolor jest żółty!”),
Tęcza:: Zielony => drukuj!(„Kolor jest zielony!”),
Tęcza:: Niebieski => drukuj!(„Kolor jest niebieski!”),
Tęcza:: Indygo => drukuj!(„Kolor to indygo!”),
Tęcza:: Fiolet => drukuj!(„Kolor jest fioletowy!”),
}
}

przypgłówny() {
pozwalać kolor = tęczowy:: niebieski;
print_color (kolor);
}

Możesz dostać warianty nigdy nie są konstruowane lub podobne ostrzeżenia, gdy spróbujesz wykonać powyższy kod, ponieważ inne warianty poza wariantem Blue nigdy nie zostały skonstruowane w tym kodzie. Dlatego w tym przypadku możesz bezpiecznie zignorować te ostrzeżenia, ponieważ jest to zamierzone.

The kolor_druku funkcja przyjmuje parametr koloru typu wyliczeniowego Rainbow. Instrukcja dopasowania dopasowuje kolor z zestawu kolorów, do których dostęp uzyskuje się za pośrednictwem nazw wariantów. Na koniec wiadomość jest drukowana na podstawie dopasowanego koloru.

Możesz użyć dopasowywania wzorców w przypadku złożonych operacji, takich jak wiele zwracanych wartości na podstawie warunku.

przypobliczyć_długość fali(kolor: tęczowy) -> u32 {
mecz kolor {

Tęcza:: Czerwona => 700,
Tęcza:: Pomarańczowy => 590,
Tęczowy:: Żółty => 570,
Tęcza:: Zielony => 510,
Tęcza:: Niebieski => 475,
Tęcza:: Indygo => 445,
Tęcza:: Fiolet => 400,
}
}

The obliczyć_długość fali Funkcja przyjmuje wariant koloru typu wyliczeniowego Rainbow jako parametr i zwraca 32-bitową liczbę całkowitą bez znaku, która jest długością fali koloru pasującego do wzorca.

Rust zapewnia również struktury do tworzenia niestandardowych typów

Wyliczenia są przydatne do definiowania niestandardowych typów dla kilku operacji, zwłaszcza w przypadkach, gdy pola są znane i określone.

Rust udostępnia również struktury, których można użyć do tworzenia niestandardowych typów z nazwanymi polami. W przeciwieństwie do wyliczeń struktury umożliwiają definiowanie pól różnych typów, do których można uzyskać dostęp i które można indywidualnie modyfikować.