Obsah

Další operátory

operátoři

V této kapitole se seznámíme s přiřazovacími operátory. Jeden z nich, operátor =, jsme již poznali. Další přiřazovací operátory nám umožňují provést s proměnnou nějakou aritmetickou operaci. Např. operátor += přičte k proměnné hodnotu druhého operandu.

  x += 5; 
Dalšími přiřazovacími operátory jsou −=, *=, /=, %=. Každý z nich je zápisem příslušné operace s proměnnou na levé straně. Např. operátor %= provede operaci modulo:
  x %= 6;  // stejné jako x = x % 6 
Všechny tyto operátory vrací hodnotu, která je výsledkem příslušné operace. Mají stejnou prioritu a asociují zprava doleva. V příkazu
  int y = x += 1; 
se tedy nejprve provede operátor += a teprve pak =. Operátor += vrátí hodnotu x po přičtení jedničky. Tato hodnota se použije jako hodnota druhého operandu operátoru =.

Probrané operátory si můžeme seřadit podle priority (od nejvyšší k nejnižší):

  1. inkrementace (++), dekrementace (−−)
  2. přetypování
  3. násobení (*), dělení (/), modulo (%)
  4. sčítání (+), odčítání (−)
  5. přiřazovací operátory (=, +=, −=, *=, /=, %=)
Priorita nám říká, jak silně se operátory váží na operandy. Např. přetypování má vyšší prioritu než násobení, proto se ve výrazu (int) d * 2 provede nejprve přetypování a až potom násobení.
  double d = 5.8;
  int i = (int) d * 2;  // stejné jako ((int) d) * 2
  System.out.println( i ); 
Tento kód tedy vytiskne hodnotu 10.

Přiřazovací operátory asociují zprava doleva a aritmetické operátory (sčítání, odčítání, násobení, dělení, modulo) zleva doprava.

Všechny binární operátory vyhodnocují operandy ve stejném pořadí: nejprve levý a pak pravý. Toto pořadí je významné, pokud má vyhodnocení operandů vedlejší efekt.

  int x = 0;
  int y = x + x++; 

Na druhém řádku se nejprve vyhodnotí operátor +. Jeho levý operand má hodnotu 0, pravý operand má také hodnotu 0, operátor tedy vrátí 0 a ta se přiřadí do y. Při vyhodnocování pravého operandu dojde ke zvýšení proměnné x o 1 (vyhodnocení má vedlejší efekt). Prohodíme-li pořadí operandů, přiřadí se do y hodnota 1.

  int x = 0;
  int y = x++ + x; 

Úloha 1

Určete, co se vytiskne.

Úloha 2

Doplňte přiřazovací operátory.

Úloha 3

Podělte reálně x a y a výsledek uložte do d.

Úloha 4

Určete, co se vytiskne.

Úloha 5

Doplňte příkazy.

Úloha 6

Napište ve správném pořadí.

Úloha 7

Doplňte křížovku.

Úloha 8

Doplňte věty.

Otázky a odpovědi

Studentka: Mistře, jaký zápis mám zvolit pro přičtení hodnoty k proměnné? Mám používat operátor +=
  x += 4; 
nebo kombinaci operátorů + a =?
  x = x + 4; 
Java guru: Používej operátor +=. Zápis pomocí tohoto operátoru je kratší a více javovský. Dávej však pozor na správný zápis. Pokud místo += napíšeš omylem =+, bude program syntakticky správně, protože půjde o kombinaci přiřazení (=) a unárního plus (+). Např.
  x =+ 2; 
přiřadí do x hodnotu 2. Obdobně pro operátor −=. Např. příkaz
  x =- 2; 
přiřadí do x hodnotu -2.
Studentka: Operátory umožňují zapisovat poměrně složité výrazy, např.
  z = y += ++x + (x /= 2); 
Mám takové výrazy používat? Jsou typické pro opravdové programátory, mistře?
Java guru: Nejsou. Uvědom si, že program jednou napíšeš a pak jej budeš několikrát číst. Proto se snaž psát čitelně a složité výrazy raději rozděluj na více jednodušších. Čtení i modifikace programu jsou potom snazší.