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 operator'', ''ternary operator'') -to [[operator]]konstrukcja stosowanyprogramistyczna w niektórych [[język programowania|językach programowania]]które dorozróżniają skrótowego zapisu wyboru wartości w zależności od warunku, zwykle w postaci <tt>warunekwyrażenia ('''?'expressions'') od wyrażenie1komend (''':'statement''), wyrażenie2</tt>.pozwalająca Przyna spełnionymsprawdzenie warunku zwracanana jest wartość pierwszegopoziomie wyrażenia, w przeciwnym razie - drugiego. Obliczana jest wartość tylko tego z wyrażeń, które zostało wybrane.
 
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]].
Zapis:
 
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;
} else {
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:
Niektóre języki, w których występuje operator warunkowy: [[C (język programowania)|C]], [[C plus plus|C++]], [[Java]].
<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.
 
[[kategoriaKategoria:Programowanie]]