Operator warunkowy

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacji, szukaj

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ż

Osobiste
Przestrzenie nazw

Warianty
Działania
Nawigacja
Dla czytelników
Dla wikipedystów
Narzędzia
Drukuj lub eksportuj
W innych językach