Jednym z podstawowych tematów programistycznych są operatory jakie znajdziecie również tutaj, w języku JavaScript. Trzeba je niezaprzeczalnie opanować, aby w ogóle dyskutować o jakimkolwiek pisaniu programu. Spokojnie pochylimy się nad każdym z nich i wytłumaczę co wolno, a czego nie wolno. Zaczniemy?

OPERATORY W JĘZYKU JAVASCRIPT SĄ POGRUPOWANE W BARDZIEJ SZCZEGÓŁOWE KATEGORIE!

Przede wszystkim, trzeba sobie uzmysłowić że operatory dzielą się na mniejsze rodzaje. To nie są wyłącznie arytmetyczne, ale także relacyjne, logiczne czy też przypisania. Musicie koniecznie rozróżniać o jakie może się rozchodzić koledze z zespołu, aby błyskawicznie się ze sobą dogadywać.

ARYTMETYCZNE

Zacznijmy od czegoś najbardziej oczywistego, co przyszłoby do głowy jako pierwsze większej części społeczeństwa. Kiedy ludzie słyszą słowo "operator", to zwykle chodzi o arytmetyczny. Istotnie, znajdziecie arytmetyczne operatory w języku JavaScript. I wymieniamy po kolei:

DODAWANIE

Dodawanie jako operator dwuargumentowy (binarny) powoduje zsumowanie podanych składników pod postacią liczb całkowitych lub rzeczywistych (dozwolona jest także mieszanina). Oto przykładowy kod wypisujący sumę dwóch składników liczbowych:

console.log(25 + 6);

Podstawiając za składniki łańcuchy znaków tworzycie konkatenację, połączenie kilku łańcuchów lub arytmetycznych wyrażeń w jeden wielki łańcuch:

console.log("Tekst A " + "i B.");

Ten przypadek "wyrzuci" na strumień wyjściowy łańcuch "Tekst A i B.". Co ciekawe występuje też możliwość połączenia liczb z łańcuchem. Wówczas taka instrukcja:

console.log(25 + "Tekst");

spowoduje przerobienie całości na łańcuch znaków, a wynikiem końcowym stanie się wartość "25Tekst", a typ będzie łańcuchowy.

ODEJMOWANIE

Odejmowanie nie różni się niczym od znanej ze szkoły podstawowej operacji różnicy w matematyce. Podając przynajmniej dwie liczby (odjemną i odjemnik), otrzymujemy wynik różnicy:

console.log(14 - 6);

Żadnych innych posunięć nie ma w języku JavaScript. Nie można "odjąć" łańcucha! Znaczy można, ale robi się to za pomocą metod.

MNOŻENIE

Iloczyn tworzony jest przy pomocy operatora "gwiazdki", choć lepiej jest to określić "asteryskiem". Ponieważ to także jest operator dwuargumentowy, wprowadzając co najmniej dwie liczby z jednej i z drugiej strony, JavaScript policzy dla nas wynik mnożenia:

console.log(6*9);
DZIELENIE

Iloraz wykonacie dzięki operatorowi dzielenia jaki jest reprezentowany przez znak ukośnika, "slash'a" czy bardziej konkretnie "forward slash'a" ('/'). W każdym razie chodzi o operację podzielenia jednej liczby przez drugą:

console.log(24 / 2);

Wynik ilorazu będzie zmiennoprzecinkowy, gdyż jak w matematyce, może być to liczba z ułamkiem:

console.log(4 / 5);

Jak dobrze czytelnicy wiedzą, dzielenie przez zero jest uznawane za działanie niedopuszczalne więc gdyby ktoś się skusił na coś takiego:

console.log(5 / 0);

niech nie liczy na sensowny wynik. JavaScript wyrzuci wtedy wartość "Infinity". Musicie wiedzieć, że każdy język programowania może to odebrać na swój własny sposób. W języku C doszłoby do awarii programu, w Javie do zgłoszenia wyjątku, a JavaScript zwraca wartość "Infinity". Pamiętajcie, że to nie jest jednakowe! Moja osobista rada: nie róbcie programowi na złość wstawiając bzdurne i durne wyrażenia.

RESZTA Z DZIELENIA A.K.A. "MODULO"

Słyszeliście o operacji "modulo"? Modulo określa się w matematyce wyznaczanie reszty z dzielenia. W programowaniu nie używamy skrótu "mod" tylko korzystamy z symbolu procent ('%'):

console.log(8 % 3);

To zwróci cyfrę 2, ponieważ w ósemce "mieszczą się" dwie trójki i zostaje 2 reszty. Gdybyście byli zainteresowani dlaczego jest taki, a nie inny wynik, a nie umiecie tego liczyć w głowie, sięgnijcie po ten wzór i nauczcie się go:

a % b = a - floor(a / b)*b

Od argumentu "a", odejmujecie podłogę z ilorazu "a" i "b", a wynik dzielenia mnożycie przez argument "b". Podłoga w matematyce (w programowaniu natraficie na anglojęzyczny odpowiednik "floor") oznacza zaokrąglenie wyniku wyrażenia w dół do liczby całkowitej. Dla przykładu, podłoga z dzielenia 8 przez 3 zwróci cyfrę 2, ponieważ ułamek jaki występował (2/3) został dosłownie "obcięty".

POTĘGOWANIE

Operatory w języku JavaScript oferują coś jeszcze z serii arytmetycznych. Macie jeszcze możliwość ekspresowego potęgowania przy pomocy dwóch asterysków bez spacji ("**"). Tym sposobem:

console.log(5**2);

unikacie konieczności wywoływania funkcji albo co gorsza, korzystania z pętli "for" i ręcznego programowania podnoszenia do potęgi.

INKREMENTACJA

Stoimy teraz przy istotnym terminie jakim musicie się biegle posługiwać. "Inkrementację" nazywamy operację zwiększenia liczbowej wartości zmiennej dokładnie o jeden w górę. Najczęściej spotkacie niniejszy zapis:

x++;

I to jest postinkrementacja (szczegóły niżej), a porównując do operatora przypisania, tak wygląda instrukcja o identycznym efekcie:

x = x + 1;

Musicie wiedzieć coś jeszcze. W programowaniu wyróżnia się także "preinkrementację" i "postinkrementację". To jest seria dla początkujących więc odpuszczę sobie tłumaczenie jakie to daje różnice i w jakich okolicznościach. Pokażę tylko fragment kodu źródłowego jak to odróżniać:

let x = 6;

x++;	// preinkrementacja
++x;	// postinkrementacja

Dobra, jak tak bardzo pragniecie wiedzieć czym to się różni, to zaglądajcie tutaj.

DEKREMENTACJA

Dekrementacja jest operacją wprost przeciwną do inkrementacji i jej użycie spowoduje obniżenie liczbowej wartości zmiennej o 1:

x--;

co jest równoznaczne z:

x = x - 1;

i tak samo jak wyżej, wyróżniamy "predekrementację" i "postdekrementację", a zapisy są następujące:

x--;	// predekrementacja
--x;	// postdekrementacja

RELACYJNE

Teraz czas na inne operatory w języku JavaScript jakimi są relacyjne. Relacyjne, czyli służące do porównywania ze sobą wartości sposobem jaki znamy z lekcji matematyki (czy coś jest równe drugiemu, większe, mniejsze bądź równe i tak dalej). Przedstawmy to sobie w tabelce, żeby rzucić okiem na wszystkie jakie występują w języku:

Operator Znaczenie Przykład
== równe 5 == 5
=== równe i TAKI SAM typ danych 8 === 8
!= różne 6 != 7
!== różne i TAKI SAM typ danych 8 !== 0
< mniejsze od 4 < 8
<= mniejsze bądź równe od 4 <= 4
> większe od 0 > 7
>= większe bądź równe od 1 >= -9

Te operatory można stosować nie tylko do liczb, ale także do innych typów danych jak łańcuchy, wartości logiczne czy obiekty.

TEGO NIE UJRZYSZ W KAŻDYM JĘZYKU!

Przyjrzyjcie się czemuś ekskluzywnemu w JavaScript, a mianowicie na unikatową odmianę operatora porównania (drugi wiersz) mającego nie dwa, a TRZY znaki równości! W wielu książkach możecie znaleźć zalecenie, żeby korzystać z tej odmiany operatora porównywania zamiast z tej pierwszej. Powód jest istotny! Wspomniany operator sprawdza nie tylko wartość, ale także zgodność typów danych! W związku z tym, mając po lewej stronie cyfrę 5 a po prawej łańcuch znaków o wartości "5":

5 == "5";

zwróci...prawdę!!! A przy użyciu tego drugiego operatora porównania:

5 === "5";

okaże się fałszywe. Także orientujcie się moi drodzy z jakiego operatora korzystacie. Najprostszą odpowiedzią na pytanie "który wykorzystywać?" jest "używać tylko i wyłącznie tego drugiego!".

PORÓWNYWANIE, A PRZYPISYWANIE

Nim przejdziecie dalej, zwrócę Waszą uwagę na różnicę pomiędzy operatorem przypisania, a operatorem porównania. TO NIE SĄ TE SAME OPERATORY! Pierwszy stosujecie do przypisywania wartości, a drugi do ich porównywania. Jeśli nie odebraliście tej nauki od książki czy nauczyciela, przyjmijcie ją ode mnie. Łatwo się pomylić ze względu na podobieństwo!

LOGICZNE

Logiczne operatory w języku JavaScript nie różnią się niczym od większości innych języków wysokiego poziomu więc w tym przypadku macie do czynienia z wiedzą uniwersalną którą możecie podstawić do innych języków. Z takich najbardziej powszechnych wyróżniamy koniunkcję, alternatywę i negację logiczną.

KONIUNKCJA

Koniunkcja to jest zdanie logiczne zwracające prawdę wtedy i tylko wtedy, gdy WSZYSTKIE warunki zostały spełnione (wartość logiczna "true"). Przypomnijcie sobie bramki logiczne AND, jeśli to Wam pozwoli lepiej to sobie uzmysłowić. Chcąc zbudować koniunkcję w języku JavaScript używamy dwóch znaków "ampersandu" ("&&"):

console.log(5 == 5 && 8 > 7);

Przykładowy warunek zwróci prawdę, gdyż oba warunki są spełnione. Ale to już na przykład nie:

console.log(5 == 5 && 1 > 9 && 3 > 5);

gdyż jest spełniony tylko jeden z trzech warunków. Rozumiecie już?

ALTERNATYWA

OR oznacza alternatywę, czyli zwrócenie na wyjściu prawdy jeżeli przynajmniej JEDEN z podanych warunków jest prawdziwy. Alternatywę oznaczamy podwójnym znakiem pionowej kreski jak przy wartości bezwzględnej ("||"). Dla przykładu, kod:

console.log(7 == 4 || 5 > 3);

da prawdę na wyjściu, bo wystarczy że spełniony został ten drugi warunek. Ale ten przykład okaże się fałszywy:

console.log(7 == 4 || 1 == 2 || 35 < 3);

bo żaden z warunków nie odzwierciedla prawdy.

NEGACJA

Negacja znana pod hasłem NOT to zanegowanie wyniku zdania logicznego. To, co było prawdą, stanie się fałszem. Odwrotnie tak samo, fałsz stanie się prawdą. Stosujemy znak wykrzyknika ('!'), ale tym razem jeden raz w przeciwieństwie do alternatywy i koniunkcji, i umieszczamy go przed wyrażeniem logicznym lub wartością boolowską. Obie formy są dopuszczalne:

const b = 5 == 7;

console.log(!true);
console.log(!b);

PRZYPISANIA

Ostatnie operatory jakie mam do przekazania obowiązujące w języku JavaScript to operatory przypisania. Polegają one na przypisywaniu albo modyfikowaniu wartości zmiennej. Znowu użyję tabelarycznego zestawienia wszystkich kombinacji przypisywania oraz ich odpowiedników "na piechotę":

Operator Kombinacja Zapis alternatywny Znaczenie
= brak 5 == 5
+= a += N a = a + N 8 === 8
-= a -= N a = a - N 6 != 7
*= a *= N a = a*N 8 !== 0
/= a /= N a = a / N 4 < 8
%= a %= N a = a % N 4 <= 4
**= a **= N a = a ** N 0 > 7

Widzicie znaczek równości (pierwszy operator od góry)? To jest przypisywanie! Dlaczego uczulam ponownie, żeby nie pomylić przypisywanie z porównywaniem ukazanym wyżej.

Tabelka przedstawia "skróty" zapisu naszych intencji w kwestii modyfikacji wartości przy użyciu operatorów arytmetycznych, które zostały opisane na samym początku tego artykułu (zapis alternatywny). Radzę od razu opanować ich wykorzystywanie, gdyż są o wiele wygodniejsze.

Operatory w języku JavaScript

Operatory dzielą się na arytmetyczne, relacyjne, logiczne i przypisania. Różnią się symbolami i zastosowaniem, a wiedza o nich wszystkich jest niezbędna, żeby konstruować przepływ programu tak jak się chce!


Operatory w języku JavaScript wymagały o wiele większych komentarzy ze swej strony, stąd taki wielgachny artykuł w porównaniu do poprzednich wpisów. Proszę Was, żebyście spróbowali zrozumieć ten temat w jak największym stopniu, gdyż bez znajomości operatorów możecie zapomnieć o napisaniu JAKIEGOKOLWIEK konkretnego programu. Serio!

PODOBNE ARTYKUŁY