Powrót do C#

instrukcja switch i skoki

Instrukcja przełącznika (Switch) zapewnia bardziej elegancki sposób sprawdzania zmiennej dotyczącej równości względem listy wartości.
Każda wartość jest nazywana przypadkiem (case), a wybrana zmienna, jest sprawdzana dla każdego przypadku przełącznika.

 

Każdy przypadek reprezentuje wartość do sprawdzenia, następnie dwukropek i instrukcja, które ma zostać wykonana, jeśli przypadek jest spełniony.

Ważną rolę odgrywa tutaj wyrażenie break, które kończy instrukcję switch, zapobiegając sprawdzaniu innych jej przypadków. Bez tego wykonywanie instrukcji jest kontynuowane i przejdzie do następnego bloku instrukcji, nawet jeśli etykieta przypadków nie pasuje do zmiennej typu switch. Współczesny kompilatorom C # nie skompiluje takiego kodu. Wszystkie przypadki i kod deafault muszą kończyć się słowem break lub goto.

Jaki w ogóle jest więc sens tworzenia przełączników, skoro można to samo osiągnąć, stosując instrukcję if? Pierwszym bardzo ważnym elementem jest estetyka, przełącznik jest zwykle bardziej zwarty niż if… else…, a tym samym bardziej czytelny.

Drugi to taka, że przełącznik działa znacznie szybciej niż równoważna klatka if-else. To dlatego, że kompilator generuje tabelę skoku dla przełącznika podczas kompilacji. W konsekwencji podczas wykonywania zamiast sprawdzania, która z nich jest spełniona, decyduje tylko o tym, które działanie ma zostać wykonane. Zamiast „break;”, możemy zakończyć przypadek za pomocą „goto case <…>;” dzięki temu, możemy wywołać więcej niż jedną instrukcję przełącznika, wywołać kilka naraz lub przenieść się do wybranej instrukcji nawet tej poza przełącznikiem. Poniższy kod prezentuje pierwszą prostą pętle, która zatrzymuje się w momencie, gdy napisów BOOM! jest >= 100:

Wykonując powyższy kod, gdy użytkownik wybierze niewłaściwy kabel, przełącznik skacze z przypadku 3 na 1 i z 1 na 3 ponad sto razy, spowodowane jest to odwołaniem do określonego przypadku, a nie wykorzystanie słowa zatrzymującego instrukcję. Drugim sposobem wykorzystania goto jest odwołanie do etykiety. Zapis nie różni się za bardzo, wykorzystując etykiety, pomijamy słowo „case”, nie przejmując się już rodzajem zmiennej warunku.

Jak widzimy, nadałem zamiast „default:” przypadek „dlaWszystkich:” (etykieta ostatniego przypadku), do którego odwołanie jest we wszystkich przypadkach, ten konkretny przypadek kończy całą instrukcję i dopisuje tekst do wyniku.

Etykiety sprawiają, że nasz kod jest jeszcze bardziej czytelny. Dodatkowo etykiety dają nam możliwość skoku nie tylko wewnątrz przełącznika, możemy je umieścić w konkretnej linii kodu i wywołać do nich skok:

Kod poniżej imituje pewną pętlę, która zmusza użytkownika do wpisania imienia:

Jeśli użytkownik nic nie wpisze, skok wykonywany jest na początek kodu. Oczywiście skoki można wykorzystać również w instrukcji if, ale wykorzystując je w instrukcji switch, można wydobyć ich prawdziwy potencjał. Wykonując skok, możemy pominąć pewne obszary kodu, co powoduje, że nie są one w ogóle wykonywane, a kod realizowany jest szybciej (ponieważ pomijamy elementy, które mogą go spowolnić).


 

 

 

Permalink do tego artykułu: https://visualmonsters.cba.pl/c/instrukcja-switch-skoki/