Cześć i witaj. W tym wykładzie chcę porozmawiać o oświadczeniu dotyczącym przełącznika.
Jest to alternatywa dla instrukcji
if, ale zwykle używana tylko w określonych sytuacjach.
Ale ma fajną, fajną składnię do robienia pewnych powtórzeń w twojej instrukcji if.
Tak więc operator warunkowy i instrukcje if than
else ułatwiają pisanie programów, które wybierają między dwiema alternatywami.
Bardzo łatwo jest zadawać pytania i podejmować decyzje.
Jednak często program
musi wybrać jedną z kilku alternatyw.
I byłby to w
istocie if else if else if else if else if.
Jest to kłopotliwe, ponieważ możesz oczywiście zaimplementować to za pomocą instrukcji if,
gdy masz kilka alternatyw,
ale możesz mieć sto innych ifów. Jest to więc żmudne, podatne na błędy i
tak naprawdę jest po prostu upierdliwe. To jak napisanie zestawu gotowego kodu.
Więc alternatywa dla tej składni i wszystko, co możesz
zrobić w przełączniku, możesz zrobić w if.
Ale jest czystszy i łatwiejszy, a w rzeczywistości jest też o wiele bardziej wydajny.
Jeśli więc wartość zmiennej zostanie pomyślnie porównana z różnymi wartościami, użyj
instrukcji switch.
I co to oznacza, jeśli masz instrukcję if, a następnie masz inną instrukcję if, else if, else if,
else if, else if, if, if, użyj instrukcji switch.
Teraz, jeśli te wyrażenia boolowskie są trochę bardziej skomplikowane.
Nie możesz użyć instrukcji switch. Instrukcji switch można
używać tylko wtedy, gdy porównuje się z wartością, taką jak stała.
Wyrażenie nie może być tak skomplikowane.
Ale użycie instrukcji switch jest znacznie wygodniejsze i bardziej wydajne, a większość
języków również ma tę konstrukcję. I zobacz, to bardzo miłe. Jedna rzecz, którą
zauważysz, wiele języków zbuduje w oparciu o c.
Jeśli programowałeś wcześniej, zobaczysz i
zaznajomisz się z wieloma z tych
konstrukcji, ponieważ pierwotnie wyszły one w c lub be, języku wcześniej.
Oto składnia instrukcji switch. Masz słowo kluczowe switch.
Wewnątrz przełącznika znajduje się lewy i prawy nawias,
który jest wyrażeniem. Wygląda więc tak, jak instrukcja if na
początku, z wyjątkiem tego, że zamiast słowa kluczowego if, masz słowo kluczowe switch.
Masz wtedy lewy nawias.
Wymagane lewe nawiasy. Ten lewy wspornik uruchamia korpus przełącznika.
I widzisz końcowy prawy wspornik na samym dole, który kończy korpus przełącznika.
Inną ważną rzeczą w tym przypadku są te słowa kluczowe.
Przypadek jest właściwie taki sam, jak
samo stwierdzenie if. Tak więc przełącznik faktycznie
będzie patrzył na wyrażenie, a nie na
to, czy jest ono koniecznie prawdziwe, czy fałszywe.
Przełącznik może po prostu patrzeć na zmienną lub coś w tym rodzaju.
Następnie oceni tę zmienną w instrukcjach case.
Więc jeśli wartość 1 jest równa wyrażeniu,
jeśli wartość n jest równa wyrażeniu.
Ale możesz spojrzeć na to
tak, jakby przełącznik znajdował się na najwyższym poziomie, a następnie przypadki
były instrukcją if, porównując wartości z wyrażeniami w przełączniku.
Zatem przypadki są również słowem kluczowym. Zauważasz również dwukropek po sprawie.
Więc masz sprawę, a potem masz swoją wartość.
Wewnątrz możesz mieć wiele instrukcji programu.
A na końcu masz słowo kluczowe break. To kolejne słowo kluczowe. Mamy tutaj trzy
słowa kluczowe, a właściwie cztery. Na dole znajduje się słowo kluczowe switch, słowo kluczowe case,
słowo kluczowe break, a następnie słowo domyślne.
Więc to są ważne rzeczy, na które należy zwrócić uwagę. Przejdziemy przez szczegółowy
przykład, ale możesz mieć różne przypadki. I znowu, jest to po prostu działanie jak if else, if else, if else, if else.
Więc jeśli wartość jeden jest równym wyrażeniem, wykonaj kod.
W przeciwnym razie, jeśli wartość dwa jest
równa wyrażeniu, oceń to. W przeciwnym razie, jeśli wartość trzy jest równa wyrażeniu, oceń to.
W przeciwnym razie, jeśli wartość n jest równa wyrażeniu, wykonaj kod wewnątrz tego bloku.
A blok dla przypadków zaczyna się od okrężnicy i kończy na przerwie.
A jeśli nie masz tam tej przerwy,
to przejdzie przez inne sprawy. Porozmawiamy o tym ponownie.
Ostatnią ważną rzeczą jest to domyślne słowo kluczowe. To jest w istocie else,
else if, else if, else if, and then else na dole.
Więc to jest ustawiane, jeśli żaden z innych przypadków nie jest wynikiem wyrażenia.
Porozmawiajmy więc o niektórych z tych szczegółów, o których wspomniałem.
Wyrażenie zawarte w nawiasach jest pomyślnie porównywane z wartościami.
Więc
znowu, jeśli wrócimy do składni, wyrażenie zostanie porównane ze wszystkimi wartościami.
A jeśli jest równa którejkolwiek z wartości, wykonujesz kod wewnątrz tej wartości.
Przypadki muszą być prostymi stałymi lub stałymi wyrażeniami, wyrażeniami,
których wynikiem jest stała.
Możesz więc włączyć x plus y, ponieważ
jeśli x wynosi 5, po prostu włączyłoby 10 i porównałoby wartości do 10.
Ale zwykle włączasz zmienną, która jest równa jakiejś liczbie.
Jeśli zostanie znaleziony przypadek, którego wartość jest równa wartości wyrażenia, wykonywane
są instrukcje następujące po tym przypadku.
W przypadku dołączenia więcej niż jednej instrukcji nie trzeba ich zamykać w nawiasach klamrowych.
Oznacza to po prostu, że
jeśli dołączono więcej niż jedną instrukcję, w
instrukcjach case nie są wymagane nawiasy klamrowe.
Pamiętaj, że w przypadku instrukcji if zawsze musielibyśmy mieć
te nawiasy klamrowe, tak nie jest. Możesz po prostu wstawić je jedną linię po drugiej, kluczem jest tam przerwa.
Instrukcja break sygnalizuje koniec danej sprawy
i powoduje przerwanie wykonywania instrukcji,
wyskakuje.
Jeśli nie masz tam przerwy, kolejna sprawa się załamie.
Więc chcesz dołączyć instrukcję break do końca każdej sprawy. Jeśli nie uwzględniasz przerw, zwykle oznacza
to błąd lub coś takiego.
Jedynym powodem, dla którego chcesz dołączyć przerwę, jest sytuacja, w której masz wiele
warunków, w których chciałeś wykonać kod. Więc jeśli miałbyś wiele przypadków,
po prostu mówiąc, czy wyrażenie
to ten przypadek, ten czy inny przypadek, zrób
to samo,
a następnie usuniesz przerwy.
Dlatego uważaj na przerwy, ponieważ przerwy mogą powodować problemy,
niezależnie od tego, czy niektóre bloki są wykonywane w następnym przypadku.
Specjalny opcjonalny przypadek nazywany domyślnym jest wykonywany, jeśli wartość wyrażenia
nie pasuje do żadnego z przypadków. To jest to samo, co upadek, w przeciwnym razie zdarza
się, jeśli żaden z przypadków nie jest prawdziwy.
Oto ładny przykład, w którym tworzymy przełącznik do oceny wyliczenia.
W tym przypadku mamy typ wyliczeniowy o nazwie dzień tygodnia,
który jest określony przez wszystkie dni tygodnia.
Następnie utworzyliśmy zmienną typu enum weekday i ustawiliśmy ją na poniedziałek, a
następnie włączamy dzisiaj.
Zatem w zależności od dzisiejszej wartości zmiennej zostanie
wykonana jedna z instrukcji case.
Jeśli dzisiaj jest niedziela, to wydrukuje się dzisiaj jest
niedziela, a potem wyskoczy.
Jeśli dzisiaj jest poniedziałek, to wydrukuje się dzisiaj jest poniedziałek i wyskoczy.
Jeśli nie jest równy żadnemu
z nich, przejdzie do przypadku domyślnego. Przejdźmy więc przez ten przykład w blokach kodu.
Tutaj mamy nasz przykładowy kod. Zobaczysz to, ponieważ dzisiaj jest
równy poniedziałkowi, przypadek
poniedziałku będzie oceniany, a dzisiaj zobaczysz wynik w poniedziałek.
Więc przejdźmy dalej, zbudujmy ten kod i uruchom go. I to właśnie zobaczymy, dzisiaj
jest poniedziałek.
Ponieważ to, co się tutaj wydarzy, będzie w poniedziałek. Umieszczasz to wyrażenie,
które chcesz dzisiaj oszacować, a następnie obliczasz ją.
Kluczowe rzeczy do zapamiętania to
nawias rozpoczynający instrukcję switch w linii 16 w nawiasie
końcowym i kończący nazwę przełącznika w linii 29.
Możesz mieć wiele wierszy w każdej instrukcji case bez używania nawiasów.
Zobaczmy teraz, co się stanie, jeśli
po poniedziałku usuniemy instrukcję przerwania.
Ponieważ pamiętaj, break wyskoczy od razu z obudowy. Ale jeśli to
usuniemy, to, co się stanie,
będzie trwało do wtorku i zobaczysz, że oba printfs
wykonywane są na dzisiejszy poniedziałek i dzisiaj jest wtorek.
Więc teraz, kiedy uruchamiamy program,
widzimy, że dzisiaj jest poniedziałek, dzisiaj jest wtorek.
Takie jest znaczenie instrukcji przerwania.
Przerwa wyskakuje.
Może to być przydatne, jeśli chcesz uzyskać te same wyniki w poniedziałek i wtorek.
Na przykład czasami zobaczysz takie
stwierdzenia, przypadek wtorek, ponieważ chcesz uzyskać ten sam wynik
i nie ma znaczenia, jakiej zmiennej jest równa.
Możesz więc zobaczyć takie rzeczy, ale jeśli masz oddzielne instrukcje
case, które mają różne wykonania, musisz dodać tam przerwę.
Więc patrzymy tylko na niedzielę, poniedziałek i wtorek.
Co się stanie, jeśli ustawimy dzisiejszą wartość na niedzielę, ponieważ
nie ma przypadków, które pasowałyby do tego.
Cóż, co się stanie, to upadnie z wartości domyślnej i wydrukuje cokolwiek.
Więc spróbujmy uruchomić to ponownie.
I widzimy, że dzisiaj jest niedziela.
Przepraszamy, ustaw to na niewłaściwą zmienną. Chcę ustawić to, powiedzmy,
na środę. Mieliśmy sprawę na niedzielę.
Więc teraz zobaczymy, że faktycznie wypisuje wszystko, ponieważ nie pasuje
do żadnego z przypadków.
Więc wszystko, co musisz zrobić dla przełącznika, to naprawdę zapamiętać składnię.
Wyrażenie znajduje się w nawiasach, to właśnie będziesz oceniać.
Przypadki muszą pasować do wyrażenia. Zwykle więc robisz zmienne, dlatego muszą
to być stałe lub wyrażenia, których wynikiem jest określona stała wartość.
A potem masz przypadki dla każdej rzeczy, a następnie domyślną wszystkie sprawy i nie zapomnij o przerwach.
Wróćmy i porozmawiajmy trochę więcej i kolejny przykład konstrukcji
przełącznika z przypadkami.
W następnym przykładzie jest trochę inaczej.
To, co tutaj robimy, polega na tym, że pobieramy dane od użytkownika, a następnie włączamy to.
W tym przykładzie w naszej funkcji głównej zaczyna się
tworzenie kilku liczb zmiennoprzecinkowych, a następnie tworzy operator znakowy, a następnie prosi
użytkownika o wprowadzenie wartości, operatora i wartości dwa.
Do rozróżniania używa specyfikatorów formatu, a wszystkie mają adres w postaci ampersandów.
W zależności od znaku, który wprowadzisz dla operatora, czy jest to plus minus czy gwiazdka,
to właśnie chcesz uwzględnić w obudowie przełącznika.
Więc jeśli użytkownik wprowadził plus,
więc zobaczysz w następnej kolumnie tutaj, konstrukcja przełącznika, to operator włączający.
Będzie porównywać wartość operatora, wartość operatora zmiennej, z każdą z
tych instrukcji case. Zauważysz, że te stwierdzenia
przypadków są otoczone pojedynczymi cudzysłowami, ponieważ porównujemy znaki.
Możesz więc porównywać
liczby, zmienne z wartościami określonych stałych lub znaki z określonymi stałymi.
Następnie w każdym oświadczeniu przypadku drukujemy określony format.
Wartość jeden plus wartość dwa, wartość jeden minus wartość dwa.
W rzeczywistości wykonujemy obliczenia w naszym druku.
A potem znowu widzisz te ważne stwierdzenia przerwania,
które wyskakują, i są potrzebne, jeśli nie chcesz upaść w żadnej z pozostałych spraw.
Zauważysz również, że w tym ostatnim przypadku instrukcja, w której ma ukośnik w przód jako dzielnik,
mamy instrukcję if.
Nie mamy żadnych nawiasów wokół przypadku,
ponieważ możemy mieć wiele instrukcji w każdym przypadku bez nawiasów.
Więc w ostatnim przypadku mówimy, że jeśli wartość dwa jest
równa 0, sprawdzamy, czy nie dzielimy przez 0.
A jeśli nie podzielimy przez 0, to faktycznie wykonamy dzielenie.
A potem na samym końcu tej sprawy mamy kolejną przerwę.
Nasz domyślny przypadek mówi, że podałeś operator, z którym nie wiemy, jak sobie poradzić.
Ale instrukcja switch jest bardzo wydajna.
Zapisywanie jest bardzo szybkie, gdy porównujesz wiele
różnych wartości z określoną zmienną, a następnie chcesz zrobić inne rzeczy.
Ostatnią rzeczą, o której chciałem wspomnieć, było przejście do oświadczenia w związku z podejmowaniem decyzji.
To nie jest bezpośrednia
decyzja, to raczej przeskok do innej linii kodu, użycie etykiety, ale jest
ona dostępna w c i dlatego chciałem o tym wspomnieć.
Instrukcja go to składa się z dwóch części: etykiety i słowa kluczowego go to.
Ci z was, którzy wcześniej programowali w
języku Fortran lub w innych podstawowych językach, prawdopodobnie to rozpoznacie i prawdopodobnie
używaliście go całkiem sporo.
Przechodząc do c, naprawdę nie ma potrzeby
go używać. Jest kilka przypadków, w
których zauważyłem, że jest to całkiem przydatne, które wyjaśnię za chwilę, ale trzeba przejść do
jakiegoś kodu i możesz przejść do dowolnego wiersza kodu.
Jednym z powodów, dla których ludzie nie lubią go używać, ponieważ jest bardzo trudny do naśladowania.
Kiedy utrzymujesz program i jeśli jest on sekwencyjny, przechodzisz wiersz po
wierszu, instrukcje if w pętli while.
Wystarczająco złe jest, gdy masz instrukcje if w pętlach while.
Ale teraz, jeśli masz coś, w którym w zasadzie jesteś w linii 27 kodu
źródłowego i masz zamiar przeskoczyć do wiersza 800 bez powodu innego niż tylko przejdź do słowa kluczowego,
nagle pomijasz mnóstwo kodu, i jest bardzo trudne do utrzymania i naśladowania.
A więc dwie części, do których należy przejść, i nazwa etykiety. Etykieta nosi nazwę
zgodnie z tą samą konwencją nazywania zmiennej, znaki alfanumeryczne, nie możesz
zaczynać od cyfr, możesz zacząć od podkreślenia.
możesz zacząć od podkreślenia.
Zasadniczo wystarczy użyć słowa kluczowego go to i przejść do identyfikatora,
część druga. Część druga to gdzieś etykieta.
Aby więc faktycznie przejść do tej linii kodu, musisz oznaczyć ją etykietą.
Musi istnieć oświadczenie, które mówi, że część druga.
Teraz pokażę ci przykład, ale naprawdę nigdy nie powinieneś tego
używać z powodu problemów związanych z konserwacją.
Jednak chciałem o tym wspomnieć, jeśli programowałeś wcześniej i jesteś przyzwyczajony do tego.
Wc tak naprawdę nie musisz go używać tak często.
Widziałem jeden przypadek użycia, który może być przydatny.
Niedawno pracowałem z innym programistą i miał
on kilka zagnieżdżonych pętli lub
zagnieżdżonych instrukcji if.
Ale pętle są prawdopodobnie lepszym przykładem. Pętle, pamiętajcie, powtarzamy kod. Miał wiele zagnieżdżonych pętli.
A na samej wewnętrznej zagnieżdżonej pętli, takiej jak
piąta, chciał wyskoczyć ze wszystkich pętli, ponieważ miał jakiś stan.
I tak zwykł chodzić, aby wyskoczyć z tych wszystkich pętli.
Teraz innym sposobem na wyskoczenie z pętli jest użycie słowa
kluczowego brake, ale hamulec wyskoczy tylko z najbardziej wewnętrznej.
Tak więc naprawdę nie było skutecznego sposobu bez ustawienia przez niego
kilku flag i posiadania zestawu instrukcji if, aby wyjść z każdej
pojedynczej pętli, więc zwykł jeździć. I to był jeden przypadek, który uważałem
za całkiem przydatny, ponieważ zmniejszył ilość kodu, który trzeba było napisać, i było całkiem jasne, co się dzieje.
Po prostu wyskakiwałeś ze wszystkich zagnieżdżonych pętli, ponieważ
spełniłeś określony warunek.
I to jest jeden przypadek. Ale w większości przypadków nie musisz tam iść iz
powodów, o których wspomniałem, jest to bardzo problematyczne, ciężko jest podążać za kodem, gdy skaczesz po całym miejscu.
Ale przejście do jest takie samo, jak używasz go, tak jak używasz w innych językach.
Masz słowo kluczowe przejdź do z nazwą etykiety.
A to, co stanie się w twoim kodzie, to przeskoczenie do tego wiersza kodu z etykietą.
Możesz więc pominąć wszelkiego rodzaju kody.
W tym przykładzie mamy etykietę o nazwie top
z dwukropkiem. Stąd wiesz, że to etykieta.
A top ma kilka stwierdzeń. A na samym
dole znajduje się stwierdzenie if. I mówisz, że jeśli znak równa się y, idź na górę.
Więc znowu widzisz, jak możesz po prostu przeskakiwać dookoła w swoim kodzie, a to bardzo utrudnia śledzenie.
Więc nie używaj go w zasadzie, chyba że masz wiele, wiele, wiele zagnieżdżonych pętli i
chcesz wyskoczyć ze wszystkich pętli. Dziękuję Ci.