• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

switch case czy if else?

Object Storage Arubacloud
0 głosów
330 wizyt
pytanie zadane 22 sierpnia 2022 w C i C++ przez Daaa22 Dyskutant (8,250 p.)

Z tego co czytałem, switch case robi tablice z haszowaniem, która jest szybsza niż else if. Czy zawsze kiedy mam sytuacje typu

if(variable == 0)
{
...
}
else if(variable == 1)
{
...
}
...
else if(variable == 100)
{
...
}

powinienem zrobić

switch(variable)
{
case 1:
...
break;
case 2:
...
break;
...
case 100:
...
break;
}

?
Ogólnie mówiąc, zawsze kiedy mogę powinienem używać switch case? A instrukcje if else zostawić wtedy kiedy nasza variable nie jest liczbą?

2 odpowiedzi

+3 głosów
odpowiedź 22 sierpnia 2022 przez Wiciorny Ekspert (269,710 p.)
wybrane 23 sierpnia 2022 przez Daaa22
 
Najlepsza

W 99,99% przypadku, nie powinno cię to obchodzić.

Tego rdzaju mikrooptymalizacje raczej nie wpłyną na wydajność Twojego kodu, mogą znacznie poprawić czytelność, ale nie zawsze tworzenie wielkiego bloku switch będzie takim rozwiązaniem, na pewno w sytuacji korzystania z np. wzorca strategii, mogłoby to być lepsze.

W przypadku zaledwie kilku operacji różnica jest niewielka, praktycznie niezauważalna. Jeśli masz dużo operacji/warunków, zdecydowanie powinieneś użyć switcha.

Np. SWITCH jeśli  zawiera więcej niż pięć elementów, generalnie jest zaimplementowany przy użyciu tabeli przeglądowej lub listy skrótów. Oznacza to, że wszystkie elementy mają taki sam czas dostępu w porównaniu do listy wykorzystywanej przez IF/ELSE, gdzie dotarcie do ostatniego elementu zajmuje znacznie więcej czasu, ponieważ musi najpierw ocenić każdy poprzedni warunek.

Więc przy niewielkiej ilości operacji totalnie jest to bez znaczenia, też z punktu widzenia ilości warunków, myśle że tworzenie IF/ELSA dla 5> więcej przypadków jest po prostu NIECZYTELNE i kod staje się bardziej dirty. 

Ogólnie mówiąc, zawsze kiedy mogę powinienem używać switch case? 

Nie bo jeśli faktycznie twój warunek uwzględnia 2 podejścia jeśli/w innym przypadku to dużo czytelniej będzie wykorzystać IF/ELSE lub operator trójargumentowy jeśli twój język taki wspiera  
https://www.algorytm.edu.pl/wstp-do-c/trojargumentowy-operator.html

komentarz 22 sierpnia 2022 przez Oscar Nałogowiec (29,290 p.)
Bardzo trafne uwagi, trzeba pamiętać, że kompilator sam wykonuje (czasem trzeba dodać jakieś opcje do polecenia) optymalizację, są one lokalne (w sensie wewnątrz funkcji) i zwykle znacznie efektywniejsze niż dobne zmiany kodu źródłowego (kompilator lepiej "wie" co robi, w sensie wie które zmienne w danym momencie ma w rejestrach, które w pamięci, ile trwają poszczególne instrukcje itp).
+1 głos
odpowiedź 22 sierpnia 2022 przez adrian17 Ekspert (344,860 p.)

robi tablice z haszowaniem

Hashowanie to często overkill dla takiego lookupu po liczbie, wystarczy zwykła tablica.

No i ogólnie zazwyczaj kompilator "wie lepiej" co chcesz zrobić i jak zobaczy taki łańcuszek `if`ów na liczbach, to wygeneruje taki sam kod jak gdyby to był switch. Sam zobacz:

https://godbolt.org/z/cGhM4jrdT  vs https://godbolt.org/z/q7hfhWsd9

Ale sam bym pewnie napisał to switchem :)

Podobne pytania

0 głosów
2 odpowiedzi 611 wizyt
pytanie zadane 3 kwietnia 2016 w C i C++ przez veryhotshark Obywatel (1,620 p.)
0 głosów
3 odpowiedzi 298 wizyt
+1 głos
1 odpowiedź 216 wizyt
pytanie zadane 25 października 2016 w C i C++ przez BanditPlayGame Użytkownik (680 p.)

92,551 zapytań

141,399 odpowiedzi

319,529 komentarzy

61,937 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...