Duża ilość warunków do sprawdzenia w if, jakaś alternatywa?

0

Zastanawiam się czy istnieje jakiś bardziej elegancki sposób na sprawdzenie wielu warunków w if'ach niż taki? Bo jeżeli jest tego naprawdę dużo to robi się trochę nieczytelne.

if(napis == "jakis napis" && (zmienna = 1 || zmienna == 2 || zmienna == 3 || zmienna == 4 ...)
  //ustawienie czegos  
if(napis == "jakis inny" && (zmienna = 1 || zmienna == 2 || zmienna == 3 || zmienna == 4 ...)
  //ustawienie czegos  
if(napis == "jakis kolejny" && (zmienna = 1 || zmienna == 2 || zmienna == 3 || zmienna == 4 ...)
  //ustawienie czegos
0

pokaz caly kod. Zapewne ten kod mozna ulepszyc.

0

W 90% przypadkach da się napisać kod unikając dużych switchy czy ifów. W nielicznych przypadkach gdy nie da się tego uniknąć, stosuje się zabiegi upiększające używając tablic, słowników itp.

0

Kod jest dość spory więc całego go nie wkleję.
Mam funkcję do której przekazuję 2 argumenty, dla lepszego zobrazowania np. nazwa stacji radiowej i czestotliwość.
Każda stacja może pracować na różnych częstotliwościach i właśnie to sprawdzam w ifach co przyszło i dalej coś tam robię.

stacja1 10
        20
        30
        40
        50  
stacja2 150
        200
        250
        350
        400

Czyli mam takie odwzorowanie 1 do kilku i muszę sprawdzić każdą z możliwości, czego najlepiej użyć by ten kod upościć?

2

zrobic klase Stacja.
Przy tworzeniu obiektu wpisac na jakich czestotliwosciach pracuje (niech to bedzie struktura) i mozesz sprawdzic czy dla stacji warunek jest sprawdzony czy nie na zasadzie

return stacja.CzyMozeOdbierac();

if bedzie jeden ale dla kazdego obiektu inny.

Tyle moge "wyczarowac" na podstawie informacji ktorych dales.

1

Zapisz te częstotliwości do tablicy i możesz użyć find (lub binary_search jeśli są sortowane) do sprawdzenia.

vector<int> freqs = { 10, 20, 30, 40, 50 };
string radio = "RMF";
int fr = 30;
if (radio == "RMF" && binary_search(begin(freqs), end(freqs), fr))
    ....
2

Jejku, jej! Nie róbcie sobie jaj. unordered_map<string,unordered_map<int, Cośtam> > i nie kombinujcie niepotrzebnie. Cośtam to wskaźnik do funkcji, albo obiekt który realizuje twoje "ustawianie czegoś" a potem w kodzie masz po prostu

Cośtam cośtam = mapa[napis][zmienna];
cośtam.ustaw();

I voila. Żadnych ifów.

Przy czym znacznie wygodniej będzie to zrobić tak jak napisał @fasadin tzn zamknąć to w ładne klasy i mieć map<string, Stacja> na przykład.

1 użytkowników online, w tym zalogowanych: 0, gości: 1