Podobnie jak instrukcje if, które dają programowi możliwość podejmowania decyzji, instrukcje switch mogą być użyte do dodania odrobiny inteligencji do każdego programu. W rzeczywistości, instrukcja switch jest w zasadzie wyspecjalizowaną wersją instrukcji if, która w przeciwnym razie zawierałaby nadmierną ilość instrukcji typu ELSE IF.

Przyjrzyjmy się, dlaczego są one używane.

Czasami, podczas wprowadzania logiki do swoich programów, natkniesz się na sytuację, w której biorąc pod uwagę wartość pewnej części danych, będziesz chciał zrobić coś innego. Normalnie można to zrobić za pomocą instrukcji if, ale co jeśli chcesz uwzględnić 5, 10, a nawet 20 możliwych sytuacji?

Używając instrukcji if, twój program szybko stałby się plątaniną składni instrukcji if, i nie byłby zbyt czytelny ani jasny co się w nim dzieje. Programiści zdali sobie z tego sprawę i tak narodziły się instrukcje switch!

Sztuka instrukcji switch

Konstrukcja switch pobiera pojedynczą wartość, a następnie porównuje ją z wieloma innymi wartościami za pomocą wyrażenia boolean. Gdy jedno z tych wyrażeń boolean jest prawdziwe, wtedy zostanie wykonany określony fragment kodu.

Ta struktura pozwala na łatwe mapowanie wartości do fragmentu kodu, który powinien zostać wykonany. Spójrz na prostą instrukcję switch poniżej, aby zapoznać się z jej składnią w Rubim:

Copymy_grade = "A "case my_grade when "A" puts "You Pass" when "F" puts "You fail" else puts "Invalid grade "end

Jak widać powyżej, zaczynamy od wartości myGrade. Zasadniczo chcemy wydrukować czy student zdał czy nie, biorąc pod uwagę jego ocenę (A lub F).

Zamiast uciekać się do instrukcji if, możemy użyć switch. W przeciwieństwie do instrukcji if, które potrzebują wyrażeń boolean wewnątrz nawiasów, z instrukcją switch po prostu przekażemy wartość. W tym przypadku przekazujemy myGrade.

Teraz, gdy mamy naszą wartość, chcemy ustawić serię instrukcji case. Te instrukcje przypadków są w zasadzie prawą stroną wyrażenia boolean dla równości. Ruby porówna myGrade do każdej z wartości w wyrażeniu case (’A' i 'F') pod kątem równości. Jeśli jest zgodność, zostanie wykonany kod znajdujący się bezpośrednio pod instrukcją case.

Przełączniki

Jedną z rzeczy, o których należy pamiętać w instrukcjach switch jest to, że domyślnie Ruby będzie próbował sprawdzić wszystkie z nich pod kątem równości, nawet jeśli uzyska zgodność. Różni się to od struktury ELSE IF, gdzie gdy warunek jest prawdziwy, przestaje sprawdzać te poniżej.

Ponieważ Ruby będzie automatycznie sprawdzał każdy przypadek bez względu na wszystko, potrzebujemy sposobu aby temu zapobiec (przez większość czasu chcesz temu zapobiec). W przypadku dopasowania, chcę aby switch przestał sprawdzać pozostałe przypadki.

W tym miejscu pojawia się słowo kluczowe break. Słowo kluczowe break mówi Rubiemu, że skończyliśmy z instrukcją switch, i powinien się z niej wyłamać i przejść dalej.

Prywatnie napotkałem sporo błędów w programach, które napisałem zapominając o wstawieniu instrukcji break. Więc miej to z tyłu głowy.

Default

Jeśli przeanalizujesz powyższą instrukcję switch, zauważysz również słowo kluczowe default. To słowo kluczowe działa podobnie jak ELSE w strukturze instrukcji if. Każdy kod poniżej domyślnej instrukcji zostanie wykonany, jeśli żaden z pozostałych przypadków nie zostanie dopasowany. Zauważ również, że nie potrzebujemy instrukcji break wewnątrz default.

Generalnie, gdy mamy do czynienia z sytuacją, w której używamy switcha, domyślna instrukcja po prostu wyłapie wszystkie sytuacje, których nie chcemy określać w instrukcji case.

W przypadku powyższego programu wypisuje on Invalid Grade dla każdej klasy, która nie jest A lub F.

Większość czasu będziesz chciał dołączyć domyślną deklarację.

Wrapping it up

W praktyce, switch statement są używane znacznie rzadziej niż if statements. Powodem tego jest fakt, że jest znacznie mniej sytuacji, w których instrukcja switch jest odpowiedniejsza od instrukcji if. Dobrą zasadą jest jednak to, że jeśli musisz sprawdzić jedną wartość względem kilku innych wartości pod kątem równości, to możesz potrzebować switcha!

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *