50 ROZDZIAŁ 8. OPERATORY • koniunkcja (&&) i • alternatywa (||). Działają one bardzo podobnie do operatorów bitowych jednak zamiast operować na poszczególnych bitach biorą pod uwagę wartość logiczną argumentów. Wyrażenie ma wartość logiczną 0 wtedy i tylko wtedy, gdy jest równe 0. W przeciwnym wypadku ma wartość 1. Operatory te w wyniku dają albo 0 albo 1. Skrócone obliczanie wyrażeń logicznych Język C wykonuje skrócone obliczanie wyrażeń logicznych — to znaczy, oblicza wyrażenie tylko tak długo, jak nie wie, jaka będzie jego ostateczna wartość. To znaczy, idzie od lewej do prawej obliczając kolejne wyrażenia (dodatkowo na kolejność wpływ mają nawiasy) i gdy będzie miał na tyle informacji, by obliczyć wartość całości, nie liczy reszty. Może to wydawać się niejasne, ale przyjrzyjmy się wyrażeniom logicznym: A && B A || B Jeśli A jest fałszywe to nie trzeba liczyć B w pierwszym wyrażeniu, bo fałsz i dowolne wyrażenie zawsze da fałsz. Analogicznie, jeśli A jest prawdziwe, to wyrażenie 2 jest prawdziwe i wartość B nie ma znaczenia. Poza zwiększoną szybkością zysk z takiego rozwiązania polega na możliwości sto- sowania efektów ubocznych. Idea efektu ubocznego opiera się na tym, że w wyrażeniu można wywołać funkcje, które będą robiły poza zwracaniem wyniku inne rzeczy, oraz używać podstawień. Popatrzmy na poniższy przykład: ( (a 0) || (a 0) — da ono prawdę, czyli reszta obliczeń nie będzie potrzebna. Jeśli a będzie mniejsze od zera, najpierw zostanie obliczone pierwsze podwyrażenie a następnie drugie, które da prawdę. Ciekawy będzie jednak przypadek, gdy a będzie równe zero — do a zostanie wtedy podstawiona jedynka i całość wyrażenia zwróci prawdę (bo 1 jest traktowane jak prawda). Efekty uboczne pozwalają na różne szaleństwa i wykonywanie złożonych operacji w samych warunkach logicznych, jednak przesadne używanie tego typu konstrukcji powoduje, że kod staje się nieczytelny i jest uważane za zły styl programistyczny. Operator wyrażenia warunkowego C posiada szczególny rodzaj operatora — to operator ?: zwany też operatorem wyrażenia warunkowego. Jest to jedyny operator w tym języku przyjmujący trzy ar- gumenty. a ? b : c Jego działanie wygląda następująco: najpierw oceniana jest wartość logiczna wyrażenia a; jeśli jest ono prawdziwe, to zwracana jest wartość b, jeśli natomiast wyrażenie a jest nieprawdziwe, zwracana jest wartość c.
... zobacz całą notatkę
Komentarze użytkowników (0)