Mój program czeka na wprowadzenie danych przez użytkownika, a w razie potrzeby go przetworzy. Muszę sprawdzić dane wprowadzone przez użytkownika, aby upewnić się, że spełnia ono określone kryteria, a jeśli nie spełnia wszystkich tych kryteriów, zostanie ono odrzucone.Sprawdź, czy wprowadzone przez użytkownika błędy nie są eleganckie.
Pseudo-kod jest coś takiego:
if (fulfills_condition_1)
{
if (fulfills_condition_2)
{
if (fulfills_condition_3)
{
/*process message*/
}
else
cout << error_message_3; //where error_message_1 is a string detailing error
}
else
cout << error_message_2; //where error_message_2 is a string detailing error
}
else
cout << error_message_1; //where error_message_3 is a string detailing error
Istnieje możliwość, że niektóre z tych warunków może wzrosnąć, a ja zastanawiałem się, czy nie było schludniejszy drogę do reprezentowania pomocą przełącznika lub coś podobnego to zamiast wielu kaskadowych instrukcji if
.
Wiem, że istnieje możliwość korzystania
if (fulfills_condition_1 && fulfills_condition_2 && fulfills_condition_3)
/*process message*/
else
error_message; //"this message is not formatted properly"
ale jest to mniej użyteczny niż pierwszy, i nie powiedzieć, gdzie jest problem.
warunki można z grubsza ułożone w coraz większe znaczenie tj sprawdzanie condition_1
jest ważniejsze niż sprawdzanie condition_3
, więc sprawozdania if
zrobić pracę - ale czy jest lepszy sposób w ogóle to robisz?
Wyjątki ..... –
Czy rozważyłeś kontrole negatywnego stanu za pomocą klasy try-catch i klasy wyjątków, która dokładnie odzwierciedla stan, który spowodował problem w pierwszej kolejności? – WhozCraig
To zależy od złożoności danych wejściowych. Utworzyłem DSL, aby zadeklarować, w jaki sposób dane wejściowe są poprawne, i utworzyć obiekty reprezentujące to DSL, a następnie powiedzieć, aby potwierdzić to wejście. –