W większości języki komputerowe, sprawa lub warunek (znany również jako przełącznik) porównuje wartość zmiennej z wartością kilku stałych lub literałów i wykonuje pierwszą ścieżkę z dopasowanym przypadkiem. W Rubin, jest nieco bardziej elastyczny (i wydajny).
Zamiast przeprowadzania prostego testu równości stosuje się operator równości przypadków, otwierając drzwi do wielu nowych zastosowań.
Istnieją jednak pewne różnice w stosunku do innych języków. W do, instrukcja switch jest swego rodzaju zamiennikiem serii jeśli i goto sprawozdania. Obudowy są technicznie etykietami, a instrukcja switch przejdzie do pasującej etykiety. Wykazuje to zachowanie zwane „upadkiem”, ponieważ wykonanie nie kończy się, gdy osiągnie inną etykietę.
Zazwyczaj unika się tego za pomocą instrukcji break, ale czasami przewrotność jest celowa. Natomiast instrukcja case w Ruby może być postrzegana jako skrót dla serii gdyby sprawozdania. Nie ma przewrotu, zostanie wykonana tylko pierwsza pasująca sprawa.
Podstawowa forma opisu sprawy
Podstawowa forma instrukcji przypadku jest następująca.
Jak widać, jest to coś w rodzaju instrukcji warunkowej if / else if / else. Nazwa (którą nazwiemy wartość), w tym przypadku wprowadzanym z klawiatury, jest porównywany z każdym przypadkiem z gdy klauzule (tj. skrzynie), i pierwszy, gdy zostanie wykonany blok z dopasowanym przypadkiem. Jeśli żaden z nich nie pasuje, jeszcze blok zostanie wykonany.
Ciekawe jest tutaj w jaki sposób wartość jest porównywana z każdym z przypadków. Jak wspomniano powyżej, w C ++oraz w innych językach podobnych do C. używane jest proste porównanie wartości. W Ruby używany jest operator równości wielkości liter.
Pamiętaj, że typ lewej strony operatora równości spraw jest ważny, a przypadki są zawsze po lewej stronie. Więc dla każdego gdy klauzula, Ruby oceni wartość sprawy aż znajdzie dopasowanie.
Gdybyśmy mieli wejść Kok, Ruby najpierw oceni „Alice” „Bob”, co byłoby fałszywe od tego czasu Strunowy# jest zdefiniowane jako porównanie ciągów. Kolejny, /[qrz].+/i „Bob” zostanie wykonany, co jest nieprawdą Kok nie zaczyna się od Q, R lub Z.
Ponieważ żaden przypadek nie jest zgodny, Ruby wykona następnie klauzulę else.
Jak ten typ wchodzi w grę
Powszechnym zastosowaniem instrukcji case jest określenie rodzaju wartości i zrobienie czegoś innego w zależności od jej typu. Mimo że łamie to zwyczajowe pisanie kaczek Ruby, czasem konieczne jest załatwienie sprawy.
Działa to przy użyciu Klasa# (technicznie rzecz biorąc Moduł#), który sprawdza, czy prawa strona jest? lewa strona.
Składnia jest prosta i elegancka:
Kolejna możliwa forma
Jeśli… wartość jest pominięty, instrukcja case działa nieco inaczej: działa prawie dokładnie tak, jak instrukcja if / else if / else. Zalety używania instrukcji case w porównaniu zgdyby oświadczenie, w tym przypadku, są jedynie kosmetyczne.
Bardziej zwarta składnia
Są chwile, kiedy jest duża liczba małych gdy klauzule Takie stwierdzenie przypadku łatwo staje się zbyt duże, aby zmieściło się na ekranie. W takim przypadku (bez zamierzonej gry słów) możesz użyć następnie słowo kluczowe, aby umieścić treść gdy klauzula w tej samej linii.
Chociaż powoduje to bardzo gęsty kod, o ile każdy z nich gdy klauzula jest bardzo podobna, w rzeczywistości staje się więcej czytelny.
Kiedy powinieneś używać jedno- i wieloliniowych, gdy klauzule zależą od ciebie, jest to kwestia stylu. Jednak mieszanie tych dwóch nie jest zalecane - instrukcja przypadku powinna być zgodna ze wzorem, aby była jak najbardziej czytelna.
Przydział spraw
Podobnie jak instrukcje if, instrukcje case są przetwarzane do ostatniej instrukcji w gdy klauzula. Innymi słowy, można ich używać w zadaniach, aby zapewnić rodzaj tabeli. Nie zapominaj jednak, że instrukcje case są znacznie potężniejsze niż proste wyszukiwanie tablic lub skrótów. Taki stół niekoniecznie musi używać literałów w gdy klauzule
Jeśli nie ma pasującej klauzuli when i żadnej innej klauzuli, wówczas instrukcja case będzie oceniać na zero.