Operator warunkowy
Operator warunkowy (ang. conditional operator) – w programowaniu konstrukcja języka programowania, w których odróżnia się wyrażenia od instrukcji, będący formą instrukcji warunkowej wyrażoną za pomocą operatora trójargumentowego; bywa ona instrukcją wyrażeniową. Umożliwia ona sprawdzenie warunku na poziomie wyrażenia, co w pewnym stopniu zaciera rozróżnienie między wyrażeniami a instrukcjami, dzięki czemu przy jej rozsądnym używaniu kod źródłowy może zyskać na zwięzłości i prostocie.
W językach C, C++, Java, C#, Perl i Ruby operator ten ma postać:
warunek ? wyrażenie1 : wyrażenie2
W języku Python ma on nieznacznie inną składnię[1]:
wyrażenie1 if warunek else wyrażenie2
naśladującą język naturalny (w tym wypadku język angielski). Działanie operatora polega na sprawdzeniu wartości logicznej wyrażenia warunek i zwrócenie na jej podstawie jednej z wartości: wyrażenie1, gdy jest warunek jest prawdziwy i wyrażenie2, gdy jest warunek jest fałszywy; wartość wyrażenia, które nie zostało zwrócone zwykle nie jest obliczana.
Operator nie występuje we wszystkich językach o wyróżnionej charakterystyce, czego przykładem może być Pascal. Ponadto języki, w których nie wyróżnia się wyrażeń i instrukcji, np. języki funkcjonalne, mogą używać do tego celu zwykłej instrukcji warunkowej nie potrzebując osobnego operatora warunkowego.
[edytuj] Przykłady
Przypisanie
zmienna = warunek ? wyrażenie1 : wyrażenie2;
daje taki sam rezultat, co
if (warunek) zmienna = wyrażenie1 else zmienna = wyrażenie2;
Bardziej skomplikowane przypadki mogą wymagać powielania kodu lub użycia zmiennych tymczasowych, co może wiązać się również z obniżeniem jego czytelności. Poniższy przykład pochodzi z kodu źródłowego serwera Apache 2:
apr_table_set(r->headers_in, "Max-Forwards", apr_psprintf(r->pool, "%ld", (maxfwd > 0) ? maxfwd : 0));
W standardowej postaci musiałby on zostać zapisany w postaci
if (maxfwd > 0) apr_table_set(r->headers_in, "Max-Forwards", apr_psprintf(r->pool, "%ld", maxfwd)); else apr_table_set(r->headers_in, "Max-Forwards", apr_psprintf(r->pool, "%ld", 0));
lub
int tmp; if (maxfwd > 0) tmp = maxfwd; else tmp = 0; apr_table_set(r->headers_in, "Max-Forwards", apr_psprintf(r->pool, "%ld", tmp));
[edytuj] Zobacz też
- IIf – funkcja o podobnym działaniu dostępna m.in. w Visual Basic
Przypisy
- ↑ Python umożliwia stosowanie w wyrażeniach listowych (ang. list comprehension) obok tej konstrukcji podobnej do niej konstrukcji:
wyrażenie if warunek, która pełni wtedy jednak rolę zwykłej instrukcji warunkowej.