Operator warunkowy
Operator warunkowy (ang. conditional operator) to konstrukcja programistyczna instrukcji warunkowej w formie operatora trójargumentowego w językach które rozróżniają wyrażenia (expressions) od komend (statement), pozwalająca na sprawdzenie warunku na poziomie wyrażenia.
W C jest zapisywana jako warunek ? wyr1 : wyr2. Taką samą postać ma w takich językach jak C++, Java, C#, Perl i Ruby; w języku Python kolejność wyrażeń jest nieco inna: wyr1 if warunek else wyr2.
Przy spełnionym warunku zwracana jest wartość pierwszego wyrażenia wyr1, w przeciwnym razie - drugiego wyr2. Obliczana jest wartość tylko tego z wyrażeń, które zostało wybrane.
Dzięki temu rozróżnienie między wyrażeniami i komendami jest o wiele mniej istotne, niż w takich językach jak Pascal, i można pisać o wiele prostszy i bardziej zrozumiały kod.
Np.:
zmienna = warunek ? wyr1 : wyr2;
daje taki sam rezultat, co
if (warunek) then
zmienna = wyr1
else
zmienna = wyr2;
Bardziej skomplikowane przypadki wymagają duplikacji kodu lub użycia zmiennych tymczasowych, obniżając znacząco jego czytelność, np. poniższy przykład z Apache 2:
apr_table_set(r->headers_in, "Max-Forwards", apr_psprintf(r->pool, "%ld", (maxfwd > 0) ? maxfwd : 0));
musiałby zostać zapisany jako:
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));
Języki nie rozróżniające wyrażeń i komend, takie jak języki funkcjonalne, mogą używać zwykłego if w tym celu i nie potrzebują osobnego operatora warunkowego.
[edytuj] Zobacz też
- IIf - funkcja o podobnym działaniu dostępna m.in. w Visual Basic