Operator warunkowy: Różnice pomiędzy wersjami
[wersja nieprzejrzana] | [wersja nieprzejrzana] |
Usunięta treść Dodana treść
mNie podano opisu zmian |
redakcja, przykład z kodu źródłowego Apache |
||
Linia 1:
'''Operator warunkowy''' ([[język angielski|ang.]] ''conditional
W [[C (język programowania)|C]] jest zapisywana jako <tt>warunek ? wyr1 : wyr2</tt>. Taką samą postać ma w takich językach jak [[C plus plus|C++]], [[Java]], [[Perl]] i [[Ruby]].
Przy spełnionym warunku zwracana jest wartość pierwszego wyrażenia, w przeciwnym razie - drugiego. 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.:
<pre>
zmienna = warunek ? wyr1 : wyr2;
Linia 7 ⟶ 13:
daje taki sam rezultat, co
<pre>
if (warunek)
zmienna = wyr1;
zmienna = wyr2;
</pre>
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:
<pre>
[[kategoria:Programowanie]]▼
apr_table_set(r->headers_in, "Max-Forwards", apr_psprintf(r->pool, "%ld", (maxfwd > 0) ? maxfwd : 0));
</pre>
musiałby zostać zapisany jako:
<pre>
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));
</pre>
lub:
<pre>
int tmp;
if (maxfwd > 0)
tmp = maxfwd;
else
tmp = 0;
apr_table_set(r->headers_in, "Max-Forwards", apr_psprintf(r->pool, "%ld", tmp));
</pre>
Języki nie rozróżniające wyrażeń i komend, takie jak [[programowanie funkcjonalne|języki funkcjonalne]], mogą używać zwykłego <tt>if</tt> w tym celu i nie potrzebują osobnego operatora warunkowego.
|