JavaScript jako kalkulator

Nowoczesne kalkulatory pozwalają na wpisanie ciągu znaków zawierających wyrażenie i wykonanie wszystkich działań za jednym razem. Tak samo może działać konsola Nodejs w której uruchamiamy polecenia JavaScriptu.

Większość instrukcji programu zawiera wyrażenia. Prostym przykładem wyrazem jest 2 + 3 . Wyrażenie może być zbudowane z operatorów i argumentów.

Operatory to inaczej funkcje, które mogą być zapisane symbolami. Zamiast pisać mnożenie(1,2) zapisujemy1*2. Kolejność działań może być narzucona przez nawiasy. Na przykład:(3+4)*3. Dane na których są wykonywane działania (argumenty funkcji) nazywamy argumentami lub operandami (https://pl.wikipedia.org/wiki/Operand).

Operatory arytmetyczne

W JavaScript mamy dostępnych wiele różnych operatorów. Poniżej podano wykaz operatorów arytmetycznych:

Operator Działanie Przykład Wynik
+ Dodawanie 3+2 5
- Odejmowanie 3-2 1
* Mnożenie 3*2 6
/ Dzielenie 3/2 1.5
% Reszta z dzielenia 3 % 2 1

Uruchommy nodejs i spróbujmy:

$ node
> 3+2
5
> 3-2
1
> 3*2
6
> 3/2
1.5
> 3%2
1

Różne notacje liczb

W powyższym przykładzie występują liczby całkowite i ułamkowe - zwane w świecie informatyki zmiennoprzecinkowymi. Do zapisu takich lizb stosujemy kropkę dziesiętną (nie przecinek). Nie używa się znaków rozdzielających tysiące. Liczby te można zapisywać także w notacji wykładniczej. 1e4 oznacza 1*10 do potęgi 4:

> 1e4
10000
> 2e3
2000
> 123e3
123000
> 1e308
1e+308
> 1e308*10
Infinity
> 1/0
Infinity

Jak widać największa dopuszczalna jest liczba może mieć 309 cyfr. Próba jej zwiększenia prowadzi do błędu nieskończoności (Infinity). Tak samo jak próba dzielenia prez zero.

Zmienne

Podstawową różnicą między konsolą nodejs a kalkulatorem jest to, że w wyrażeniach JavaScriptu możemy używać zmiennych - czyli komórek pamięci w których przechowujemy wynik. Komórkom tym nadajemy nazwy - identyfikatory. W kalkulatorze też mamy namiastkę zmiennych: pamięć identyfikowaną literą M (od „memory”).

Zmienne w Javascript definiuje się słowem var (od variable), a od wersji ES6 także let i const (do tej kwestii jeszcze wrócimy).

Wstawienie wartości wyrażenia do zmiennej zapisuje się znakiem ‘=’.

Przykład:

> var x=10, y=12;
undefined
> x+y-1
21
> x = y % 5;
2
>

Konsola zakłada, że każda wykonana operacja zwraca jakąś wartość. Gdy nie jest to prawda – tak jak mamy to w pierwszym wierszu (jest tam tylko deklaracja zmiennych var….) - wyświetlana jest wartość „undefined”. W dalszej części podręcznika takie komunikaty będą pomijane.

Ten mechanizm wyświetlania danych nie należy do języka Javascript, ale jest sposobem działania konsoli. W samym języku jest oczywiście także polecenie wyświetlania dowolnych danych na konsoli:

> console.log(x);
2

W odniesieniu do zmiennych (pamiętających liczby) mamy dodatkowe dwie operacje arytmetyczne:

++ Inkrement (zwiększenie o 1)
-- Dekrement (zmniejszenie o 1)

Znaki ++(--) ustawiamy przed lub po zmiennej, której zawartość chcemy zwiększyć (lub zmniejszyć). Gdy ustawimy je przed zmienną, operacja zwiększenia/zmniejszenia odbywa się przed użyciem w wyrażeniu.

Przykład:

> x=3
3
> y=x++
3
> x
4
> y=++x
5
> x
5
> x=x++
5
> x
5
> ++x
6
> y=(++x)*(++x)
56
>

Zauważ, że zapis y = x++ jest równoważny z ++x (zmienna y się nie zmienia). Co ciekawe - zapis x=x++ nie powoduje żadnych zmian! To wcale nie jest oczywiste (co może być argumentem za tym, by takich konstrukcji nie (nad)używać). Celem takich zapisów jak w ostatnim wyrażeniu może być tylko utrudnienie zrosumienia ;-). Można traktować jako ciekawostkę.

Wyrażenia

Pokażemy użycie prostego wyrażenia do wyliczenia powierzchni prostokąta.

> length = 5; breadth = 2;
> area = length * breadth;
10
> console.log('Powierzchnia prostokąta = ', area);
Powierzchnia prostokąta = 10

Jak to działa

Długość i szerokość prostokąta są przechowywane w zmiennych odpowiednio length i breadth. Używamy ich do wyliczenia wyrażeń określających powierzchnię i obwód prostokąta. Wstawiamy do zmiennej area wynik wyrażenia length breadth, aby następnie wyświetlić go za pomocą funkcji console.log(druk). W tym przypadku obwodu możemy podać w funkcji drukowania bezpośrednio wyrażenie 2 (length + breadth)– bez przechowywania wyniku w zmiennej.