Kategorie operatorów

Projektanci języków programowania mogą tworzyć operatory na różne sposoby. Zwykle grupuje się je według następujących kryteriów:

  • operatory jednoargumentowe (unarne), dwuargumentowe (binarne) oraz wieloargumentowe,

  • operatory arytmetyczne (służące do działań matematycznych), relacyjne (służące do porównywania wartości), logiczne (służące do operacji logicznych, takich jak np. koniunkcja) oraz operatory przypisania (czyli po prostu przypisanie wartości do zmiennej).

Przykładowe operatory

Zacznijmy od najprostszych operatorów, z którymi mamy styczność na co dzień. Mowa o operatorach arytmetycznych:

  • operator +, czyli suma, np. 4+2 da wartość 6,

  • operator -, czyli różnica, np.  4-2 da wartość 2,

  • operator *, czyli iloczyn, np.  da wartość 8,

  • operator /, czyli iloraz, np.  4 / 2 da wartość 2,

  • operator %, czyli reszta z dzielenia, np. 5 % 2 da wynik 1.

Teraz rozpatrzmy kilka przykładów operatorów relacyjnych:

  • operator ==, w niektórych językach po prostu =, czyli operator równości,

  • operator !=, w niektórych językach <>, czyli operator nierówności,

  • operatory >=, <= czyli odpowiednio operatory większy lub równy oraz mniejszy lub równy,

  • operatory >, < czyli operatory większy i mniejszy.

Zajmijmy się teraz kategorią operatorów logicznych:

  • operatory &&, || w niektórych językach and, or, czyli operatory odpowiednio logicznej koniunkcji („ oraz ”) oraz alternatywy („ lub ”),

  • operator !, w niektórych językach not, czyli operator negacji logicznej; dla !PRAWDA wartość to FAŁSZ i na odwrót.

Ostatnim i prawdopodobnie najważniejszym operatorem jest =, w niektórych językach :=. To operator przypisania jednej wartości do drugiej, np. dla a=5 przypisuje on liczbę 5 do zmiennej a.

Priorytety operatorów

Rozpatrzmy przykład kodu w pewnym języku:

Linia 1. x plus y asterysk z.

Intuicyjnie możemy stwierdzić, że wynikiem tego działania będzie suma liczby oraz iloczynu liczb oraz . Jednak nie w każdej sytuacji będzie to takie proste, zwłaszcza gdy używamy różnych typów operatorów jednocześnie, na przykład logicznych i arytmetycznych. Rozważmy fragment kodu:

Linia 1. a plus b prawy ukośnik c plus d.

Czy otrzymujemy ułamek a+bc+d czy może liczbę a+bc+d?

Z pomocą przychodzi tu pojęcie priorytetów operatorówpriorytety operatorówpriorytetów operatorów. Twórcy języków, jeżeli to możliwe, zazwyczaj projektują operatory tak, aby kolejność ich działania odpowiadała porządkowi w matematyce. Ponieważ z kolejności wykonywania działań wynika, że dzielenie zostanie wykonane wcześniej, w większości języków wynikiem a + b / c + d będzie liczba a+bc+d.

Co jednak w sytuacji, gdy chcemy otrzymać ułamek a+bc+d? W tym celu używamy nawiasów, które ustalają kolejność operacji w taki sam sposób, w jaki robią to w matematyce. Aby otrzymać ten ułamek, zapiszemy zatem:

Linia 1. otwórz nawias okrągły a plus b zamknij nawias okrągły prawy ukośnik otwórz nawias okrągły c plus d zamknij nawias okrągły.

Przeciążanie operatorów

Czasami użyteczna może być zmiana działania jakiegoś operatora w konkretnym przypadku. Jeżeli mamy fragment tekstu oraz fragment tekstu , to intuicyjnie możemy stwierdzić, że zapis:

Linia 1. AB plus CD.

da wartość . Jest to operacja konkatenacji, czyli łączenia wyrażeń, która działa właśnie w taki sposób dla większości języków.

Konkatenacja jest przykładem przeciążania operatorówprzeciążanie operatorówprzeciążania operatorów, czyli nadania im nowych funkcji. Nie wszystkie języki oferują taką możliwość.

Ważne!

Twórcy języka Java uznali, że konkatenacja wprowadza zbyt duże zamieszanie w kodzie. Przeciążanie operatorów oferują między innymi C++, Python czy C#.

Przeciążania operatorów należy używać świadomie, ponieważ łatwo możemy stworzyć sytuację, w której kod będzie działał w niezrozumiały sposób. Warto zastanowić się, czy jesteśmy w stanie zrozumieć, jak działa przeciążony operator na danych typach zmiennych (na przykład przez analogię do matematyki czy fizyki).

Złym pomysłem byłoby przeciążenie operatora do liczenia wystąpień jakiegoś znaku w zmiennej tekstowej. Jeżeli jednak tworzymy program do symulacji fizycznych, możemy rozważyć przeciążenie operatora do dodania do siebie dwóch wektorów.

Słownik

priorytety operatorów
priorytety operatorów

zasady, według których określona jest kolejność wykonywania operacji w jednym wyrażeniu

przeciążanie operatorów
przeciążanie operatorów

przypisanie nowego działania operatora w zależności od konkretnych typów zmiennych, na jakich on operuje