Operator logiczny w programowaniu – operator dostępny w określonym języku programowania (a także w innych językach komputerowych), który działając na argumentach reprezentujących wartości logiczne, w wyniku zwraca również wartość logiczną, realizując podstawowe operacje algebry Boole’a.

To jakie operatory logiczne są dostępne w konkretnym języku programowania zależy od jego składni, a to jakie są zasady ich stosowania, w tym priorytet tych operatorów i kolejność opracowywania argumentów, od przyjętej przez autorów języka lub implementacji konwencji. Zróżnicowany jest również sposób zapisu operatorów logicznych w poszczególnych językach: stosuje się zapis, bądź w postaci słów kluczowych, bądź symboli (znaku lub znaków niebędących literami). Stosowane są operatory logiczne jednoargumentowe – operator negacji, oraz dwuargumentowe – np. suma logiczna, iloczyn logiczny i inne.

Dostępne operatory logiczne Operatory logiczne udostępnione w językach komputerowych realizują następujące operacje logiczne: jednoargumentowe: negacja; dwuargumentowe: koniunkcja, alternatywa, alternatywa rozłączna, implikacja, równoważność.

Zapis operatorów logicznych Jak wyżej zaznaczono zapis w kodzie źródłowym operatorów logicznych zależne jest od przyjętej w składni danego języka sposobu reprezentacji znakowej operatorów, przy czym stosowane są zasadniczo dwa rozwiązania: zapis za pomocą słów kluczowych, odpowiadających nazwom operacji przez nie wykonywanych, np. and, or, xor itp., takie rozwiązanie dostępne jest m.in. w języku Pascal, Visual Basic i innych, zapis za pomocą symboli składających się ze znaku lub znaków innych niż litery, np. &&, || itp. takie rozwiązanie dostępne jest m.in. w języku C, C++ i innych.

W językach programowania oprócz operatorów logicznych występują także i inne, w tym operatory bitowe, realizujące odpowiednie operacje logiczne na pojedynczych bitach. W pewnych językach, np. C, C++, zapis tych operatorów jest różny, np. dla iloczynu bitowego jest to symbol: &, natomiast dla iloczynu logicznego jest to symbol: &&. W innych językach stosowany jest jednolity zapis tych operatorów, a to czy realizowana jest operacja logiczna czy bitowa zależne jest od typu argumentów, tak jest m.in. w języku Pascal, np. iloczyn bitowy oraz iloczyn logiczny realizowany jest za pomocą operatora reprezentowanego przez słowo kluczowe: and, co stanowi tzw. przeciążanie operatorów.

Stosowanie operatorów logicznych Operatory logiczne stosuje się w wyrażeniach, których rezultat jest typu logicznego, zarówno w przypisaniu, jak i w wyrażeniach reprezentujących określone warunki realizacji algorytmu, np. w instrukcji warunkowej, pętli repetycyjnej i inne. Dają one możliwość budowania złożonych warunków, badających spełnienie bądź niespełnienie wielu różnych kryteriów równocześnie.

Przykłady: język programowania w przypisaniu w instrukcji warunkowej w pętli repetycyjnej C{ int v, *pa; v = !pv==v || v==0; }if(a<c && c>d) { /* instrukcje */ }do /* instrukcje */ while(!(v || c<b)); Pascalvar b : boolean; … begin … b:=(a<c) and (c>d); … end;if (a<c) and (c>d) then begin { instrukcje } end;repeat { instrukcje } until not(v or (c<b));

Implementacja operatorów logicznych Zagadnienie implementacji operatorów logicznych w językach komputerowych wiąże się jak wyżej zaznaczono ustalenie reguł ich stosowania obejmujących między innymi ich priorytet, łączność, zasady opracowywania argumentów i inne aspekty.

Z priorytetem operatorów logicznych wiąże się zagadnienie kolejności wykonywania obliczeń w wyrażeniach, co ma szczególne znaczenie przy budowaniu warunków złożonych w wyrażeniach reprezentujących określone warunki realizacji algorytmu. Istotne jest również, czy zawsze opracowywane są dla takich operatorów wszystkie argumenty, nawet wtedy, gdy już na podstawie jednego z nich można określić wynik operacji, oraz ich kolejność (np. w systemie programowania Turbo C argumenty operatorów logicznych opracowywane są zawsze od lewej do prawej, a drugi z argumentów nie jest opracowywany, gdy już na podstawie wartości pierwszego z nich można określić rezultat operacji, co stanowi optymalizację programu). Istnieją języki które posiadają w swoim repertuarze operatory, dla których zawsze opracowywane są wszystkie argumenty (np. w języku Visual Basic operatory And i Or), oraz odpowiadające im operatory realizację te same operacje logiczne, ale pomijające wykonywanie obliczeń dla drugiego argumentu, jeżeli rezultat operacji jest znany już po obliczeniu pierwszego z nich (np. w języku Visual Basic operatory AndAlso i OrElse). Ma to szczególne znaczenie w przypadku wykorzystywania przez programistę tzw. efektów ubocznych, których stosowanie jednak przez literaturę przedmiotu nie jest zalecanie, a wręcz jest krytykowane i negatywnie oceniane.

W zakresie priorytetów operatorów można wyróżnić między innymi przypadki krańcowe: priorytet operatorów logicznych jest wyższy niż pozostałych operatorów, priorytet operatorów logicznych jest niższy niż pozostałych operatorów.

Jeżeli priorytet operatorów logicznych jest wyższy niż innych operatorów, wykonywane są przed nimi. Oznacza to, że w tym przypadku, aby prawidłowo zbudować warunek składający się z kilku badanych kryteriów połączonych odpowiednią funkcją logiczną, niezbędne jest ujęcie poszczególnych warunków łączonych operatorami logicznymi w nawiasy wymuszającymi określoną kolejność operacji. W przeciwnym razie wynik wyrażenie nie będzie zgodny z oczekiwaniami.

Przykład w języku Pascal (operatory logiczne mają najwyższy priorytet): { warunek złożony z dwóch kryteriów, pominięcie nawiasów zmieni sposób obliczeń: w pierwszej kolejności wykonana by została operacja bitowa na wyrażeniu 2 and c, co jest niezgodne z oczekiwaniami } if (a<b*2) and (c+1>d-2) then begin { instrukcje } end;

W językach, w których operatory logiczne mają niższy priorytet niż pozostałe stosowanie nawiasów nie jest konieczne.

Przykład w języku C (operatory logiczne mają niższy priorytet):

/* warunek złożony z dwóch kryteriów, pominięcie nawiasów nie zmieni zgodnego z oczekiwaniami badania warunku złożonego */ if (a<b*2 && c+1>d-2)

/* instrukcje */

Operatory logiczne w językach programowania Poniższe zestawienie zawiera dostępne operatory logiczne w wybranych językach komputerowych.

+ Operatory logiczne w językach komputerowych język komputerowy jednoargumentowe dwuargumentowe negacja koniunkcja alternatywa alternatywa rozłączna implikacja równoważność inne ABAP NOT AND OR Ada not andand then oror else xor C, C++ ! && || != == Clipper .not. .and. .or. COBOL NOT AND OR Forth AND OR XOR Fortran 1900 .NOT. .AND. .OR. Fortran 77 .NOT. .AND. .OR. .NEQV. .EQV. JEAN NOT AND OR IS Java ! && || != == Modula-2 NOT AND& OR Pascal not and or xor Perl !not &&and ||//or xor PHP ! &&and ||or xor PL/I ¬ & | PL/M NOT AND OR XOR Python not and or REXX \¬ & | && VHDL not and or xor nxor nandnor Visual Basic, VBA Not AndAndAlso OrOrElse Xor Imp Eqv

Przypisy

Bibliografia

Kategoria:Konstrukcje programistyczne