Operator relacji
Operator relacji 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 podanych argumentach, w wyniku zwraca wartość logiczną, określającą spełnienie bądź nie spełnienie reprezentowanej przez ten operator relacji zachodzącej między zapodanymi argumentami. Wynikiem działania operatora relacji jest więc wartość reprezentująca zgodnie z zasadami obowiązującymi w składni danego języka programowania jedną z wartości logicznych: prawdę (true) lub fałsz (false).
Relacje w językach programowania
W językach programowania dostępne są operatory relacji, które badają następujące relacje:
- równości
- nierówności
- negacji równości
- nierówności ostrych
- mniejsze
- większe
- nierówności nieostrych
- mniejsze lub równe
- większe lub równe
- przynależności (zawierania)
- równoważności.
Oprócz wyżej wymienionych występują także bardziej złożone konstrukcje umożliwiające między innymi porównanie z wzorcem i inne.
Zapis operatorów relacji
Jak wyżej zaznaczono sposób zapisu w kodzie źródłowym operatorów relacji zależny 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ą 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[1][2][3], C++[3], Pascal[4], Visual Basic[5][6] i innych; taki zapis zbliżony jest do notacji matematycznej (w dostosowaniu do dostępnego w systemie komputerowym i na klawiaturze zestawu znaków), - zapis za pomocą skrótów pochodzących od nazw relacji w języku angielskim, np.
GE
– greater equal,GT
– greater then,NE
– not equal, itp., takie rozwiązanie wywodzi się i dostępne jest m.in. w języku Fortran; stosowano je także później w niektórych językach, np. ABAP[7].
Priorytet i stosowanie
Operatory relacji stosowane są w kodzie źródłowym na takich samych zasadach jak pozostałe operatory, tj. w wyrażeniach, które mogą być używane np. w przypisaniu, wywołaniu podprogramu jako argument, czy też w konstrukcjach warunkowych określających realizację algorytmu według wybranej ścieżki przebiegu sterowania na podstawie wybranych kryteriów badania. W różnych językach mają różny, określony priorytet w hierarchii wszystkich dostępnych w języku operatorów, decydujący o kolejności wykonywana działań. W wielu językach priorytet ten jest niższy niż operatorów arytmetycznych dzięki czemu zgodnie z oczekiwaniami, najpierw dokonane zostanie wyliczenie rezultatu wyrażeń arytmetycznych stanowiących argumenty dla operatora relacji, a dopiero w następnej kolejności badanie relacji między wyznaczonymi wartościami. Bardziej zróżnicowane natomiast podejście można spotkać w aspekcie priorytetów operatorów relacji w porównaniu do operatorów logicznych), które stosowane są między innymi do budowy złożonych warunków opartych na kilku kryteriach decyzyjnych. W tym przypadki, jeżeli priorytet operatorów relacji jest niższy niż operatorów logicznych, to zdefiniowane przez nie działania wykonane zostaną po operacjach logicznych. Taka kolejność wykonywania dziań w większości typowych przypadków będzie niezgodna z intencją programisty, co wymusza konieczność stosowania nawiasów, tj. umieszczania wyrażeń relacji w nawiasach, a kolejne warunki ujęte w nawiasy pozostają połączone operatorami logicznymi. Tak jest np. w Pascalu[4]i innych. W tych językach, w których operatory relacji mają wyższy priorytet niż operatory logiczne budowa warunków złożonych nie wymusza stosowania nawiasów, np. C[1][2][3], C++[3] i inne.
Pascal[4] | C[1][2][3], C++[3] |
---|---|
if (a<b) and (c>d) then begin { instrukcje } end; | if(a<b && c>d) { /* instrukcje */ } |
Operatory relacji w językach komputerowych
Poniższe zestawienie zawiera dostępne operatory relacji w wybranych językach komputerowych.
język komputerowy | równości | nierówności | przynależność | inne | ||||
---|---|---|---|---|---|---|---|---|
negacja równości | nierówności ostre | nierówności nieostre | ||||||
mniejszy | większy | mniejszy lub równy | większy lub równy | |||||
ABAP[7] | = lub EQ | <> lub NE | < lub LT | > lub GT | <= lub LE | >= lub GE | IN | CO , CN , CA , NA , CS , NS , CP , NP [a]
|
Ada[8] | = | /= | < | > | <= | >= | ||
C[1][2][3], C++[3] | == | != | < | > | <= | >= | ||
Pascal[4] | = | <> | < | > | <= | >= | in | |
REXX[9][10] | = | \= lub ^= (¬= )<> , >< | < | > | <= oraz \> (¬> )[c] | >= oraz \< (¬< )[d] | == , << , >> , <<= , >>= \^= , \== (¬== ), \<< (¬<< )\>> (¬>> )[e] | |
VHDL[11] | = | \= | < | > | <= | >= | ||
Visual Basic[5][6], VBA[12] | = | <> | < | > | <= | >= | Like , Is , IsNot |
Uwagi
- ↑ W języku ABAP operatory te dotyczą badania relacji związanych z łańcuchami znaków.
- ↑ W języku ABAP operatory te dotyczą badania relacji związanych z łańcuchami bitów.
- ↑ W języku REXX występuje operator „mniejszy lub równy” oraz „nie większy niż” (sprawdzany jest praktycznie ten sam warunek, ale wymagane jest podanie argumentów w odwrotnej kolejności ).
- ↑ W języku REXX występuje operator „większy lub równy” oraz „nie mniejszy niż” (sprawdzany jest praktycznie ten sam warunek, ale wymagane jest podanie argumentów w odwrotnej kolejności).
- ↑ W języku REXX operatory te dotyczą badania relacji związanych z łańcuchami znaków.
Przypisy
- ↑ a b c d Jan Bielecki: Turbo C z grafiką na IBM PC. Warszawa: Wydawnictwa Naukowo-Techniczne, 1990, seria: Mikrokomputery. ISBN 83-204-1101-7. (pol.).
- ↑ a b c d Jan Bielecki: Encyklopedia języka C dla IBM PC. T. I: Opis języka. Warszawa: Wydawnictwa Komunikacji i Łączności, 1989. ISBN 83-206-0919-4. (pol.).
- ↑ a b c d e f g h Jan Bielecki: Od C do C++, programowanie obiektowe w języku C. Warszawa: Wydawnictwa Naukowo-Techniczne, 1990. ISBN 83-204-1332-X. (pol.).
- ↑ a b c d Andrzej Marciniak: Borland Pascal 7.0. Poznań: Nakom, 1994, seria: Biblioteka Użytkownika Mikrokomputerów. ISBN 83-85060-53-7. ISSN 0867-6011. (pol.).
- ↑ a b Comparison Operators (Visual Basic). msdn.microsoft.com. [dostęp 2011-09-08]. (ang.).
- ↑ a b Comparison Operators in Visual Basic. msdn.microsoft.com. [dostęp 2011-09-08]. (ang.).
- ↑ a b Comparisons for Operands of Arbitrary Data Types. [w:] ABAP Programming (BC-ABA) [on-line]. help.sap.com – SAP Library. [dostęp 2011-09-08]. (ang.).
- ↑ Michał Morawski, Antoni M. Zajączkowski: Wstęp do programowania w języku Ada’95. Wyd. drugie. Łódź: 2004. [dostęp 2011-01-29]. (pol.).
- ↑ The REXX language. killbox.pl. [dostęp 2011-09-08]. [zarchiwizowane z tego adresu (2016-03-04)]. (ang.).
- ↑ Open Object Rexx™: Reference. www.oorexx.org. [dostęp 2011-09-08]. (ang.).
- ↑ Wyrażenia. [w:] Prezentacja języka VHDL [on-line]. home.elka.pw.edu.pl. [dostęp 2011-09-12]. (pol.).
- ↑ John Walkenbach: Excel 2003 PL. Programowanie w VBA.. HELION, 2004. ISBN 837361-504-0. (pol.).
Bibliografia
- John E. Nicholls: Struktura języków programowania. Warszawa: Wydawnictwa Naukowo-Techniczne, 1980, seria: Informatyka. ISBN 83-204-0246-8. (pol.).
- Michael Marcotty, Henry Ledgord, tłumaczenie: Krystyna Jerzykiewicz: W kręgu języków programowania. Warszawa: Wydawnictwa Naukowo-Techniczne, 1980, seria: Biblioteka Inżynierii Oprogramowania. ISBN 83-204-1342-7. (pol.).