Po úvodním seznámení s proměnnými si nyní ukážeme, jak s hodnotami jednotlivých datových typů nakládat. Popíšeme operátory a jejich použití. Zvýšený důraz je ve výkladu kladen na ty charakteristiky JavaScriptu, které jsou buď odlišné od jiných programovacích jazyků nebo dělají začátečníkům problémy.

Operátory se v JavaScriptu dělí na aritmetické, logické a bitové. Většina operátorů je binárních (používají se se dvěma operandy – například operátor sčítání) nebo unárních (působí na jediný operand). U přehledu je vždy v závorce uveden operátor.

Aritmetické operátory

  • Sčítání (+)
  • Odčítání nebo unární negace (-)
  • Násobení (*)
  • Dělení (/)
  • Inkrementace – zvýšení o 1 (++)
  • Dekrementace – snížení o 1 (–)
  • Modulo – zbytek po dělení (%)

Operátory inkrementace (resp. dekrementace) zvyšují (resp. snižují) hodnotu proměnné o 1. Lze je použít různým způsobem:

var cislo = 1;
cislo++; // hodnota proměnné cislo bude 2
var alfa = cislo++; // po provedení hodnota proměnné alfa bude 2, hodnota cislo 3

cislo = 1;
alert(cislo++); // zobrazí se 1 a potom se teprve zvýší hodnota proměnné

cislo = 1;
alert(–cislo); // nejprve se sníží hodnota proměnné, a pak se zobrazí její obsah, tj. 0

Jak je vidět z příkladů, záleží na tom, zda operátory použijete v zápisu před nebo za proměnnou, jejíž hodnota se použitím operátoru mění. Pokud napíšete nejprve operátor a potom teprve název proměnné, změní se nejprve hodnota proměnné, a pak se teprve s proměnnou dále operuje (vstupuje do aritmetického výrazu, tiskne se hodnota apod.). V případě, že zapíšete operátor za název proměnné, je postup přesně opačný. Nejprve proměnná vstoupí do všech výrazů a teprve po jejich provedení se změní její hodnota.

Operátor modulo je duálním operátorem, jehož výsledkem je zbytek po celočíselném dělení:

var cislo = 10 % 3; // cislo bude mít hodnotu 1
cislo = 10 % (-3.5); // cislo bude mít hodnotu 3
cislo = -10 % 3.5; // cislo bude mít hodnotu -3
cislo = -10 % (-3.5); // cislo bude mít hodnotu -3

Myslím, že z příkladu je vše jasné. Operátory sčítání, odčítání, dělení a násobení jsou zřejmé. Dodejme jen, že zápis těchto operátorů lze zkracovat. Následující dva řádky jsou sémanticky stejné:

x = x + y;
x += y;

Logické operátory

  • Podmínkový ternární operátor (?:)
  • Rovná se (==)
  • Větší než (>)
  • Větší nebo rovno než (>=)
  • Menší než (<)
  • Menší nebo rovno než (<=)
  • Nerovná se (!=)
  • Identita (===)
  • Logický součin, tj. AND (&&)
  • Logický součet, tj. OR (||)
  • Logická negace (!)

Jako první je zapotřebí si uvědomit rozdíl mezi třemi operátory: =, == a ===. První z nich, reprezentovaný jednoduchým rovnítkem (=), znamená vždy přiřazení – tak jak jsme jej používali intuitivně v předcházejících příkladech. Druhý (==) je operátorem rovnosti, přičemž se porovnávají hodnoty proměnných nebo konstant. Třetí je operátor identity (===) a při porovnávání zde hraje roli i to, zda hodnota je uložena ve stejném objektu. Detailní rozdíl mezi rovností a identitou bude popsán v jednom z dalších dílů Slabikáře JavaScriptu, v nichž se budeme zabývat objektovými proměnnými. Výsledkem porovnání je vždy hodnota datového typu Boolean.

Podmínkový operátor si nejlépe vysvětlíme na příkladu

var max = (alfa>beta) ? alfa : beta;

Do proměnné max se přiřadí hodnota proměnné alfa, pokud je tato hodnota vyšší, než hodnota proměnné beta. Jinak bude do max přiřazena hodnota proměnné beta. Stejného výsledku lze dosáhnout třeba i takto:

var max;
(a>b) ? max=a : max=b;

Logický součin a součet jsou opět duální operátory, přičemž operandy musejí být výrazy, jejichž výsledkem je typ Boolean. Výsledkem logického součinu a součtu je opět Boolean. Následující tabulky, na kterých se nejlépe vysvětluje význam obou operátorů, asi znáte.

Operátor &&
  true false
true true false
false false false
Operátor ||
  true false
true true true
false true false

Bitové operátory

  • Bitový součin, tj. AND (&)
  • Bitový součet, tj. OR (|)
  • Bitová negace (~)
  • Bitový posun vlevo (<<)
  • Bitový posun vpravo (>>)
  • Bitová nonektivalence, tj. XOR (^)
  • Bitový posun vpravo bez znaménka (>>>)

Na tomto místě vysvětleme rozdíl mezi logickým a bitovým součtem a součinem. Zatímco logické operátory si všímají čísel jako celku, bitový operátor porovnává odpovídající dvojice bitů příslušných čísel.

var x = 1 & 2; // výsledek je 0
var y = 1 | 2; // výsledek je 3

Abyste porozumněli uvedenému příkladu, je zapotřebí rozložit čísla 1 a 2 do binární soustavy. Bitový operátor pak porovnává nulté, první, druhé atd. bity obou čísel. Stejně funguje i bitová negace nebo bitová nonekvivalence (XOR). Pokud u operace XOR jsou oba operandy stejné (oba jsou 0 nebo 1), je výsledkem 0. V případě, že jsou operandy různé, je výsledkem 1. Odtud pochází i název nonekvivalence.

Stručně k bitovým posunům – binární reprezentace čísla se posune vždy o určený počet míst vpravo (resp. vlevo), přičemž nově utvořená místa se doplní bitem znaménka čísla – u kladných čísel je to 0. Pokud posunujete vpravo o 1 bit, provádíte vlastně celočíselné dělení dvěma:

var x = 11 >> 1; // výsledek bude 5

Nalevo od operátoru bitového posunu je vždy posouvané číslo, vpravo se udává, o kolik bitů se má posun provést. Bitové operace jsem vzal zkrátka, protože jejich význam není v dnešním programování velký a pravděpodobně je budete používat jen velmi zřídka. Více se můžete o bitových operátorech dozvědět v JScript reference.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět