98
Java 21 – Kompletní příručka jazyka
4.2 Operátor přiřazení = Jedním z nejdůležitějších operátorů je operátor přiřazení, který má na starosti správné uložení zadané hodnoty na správné místo v paměti. V Javě se pro něj používá znak rovnítko. Operátor vezme hodnotu, která je výsledkem operace zapsané na jeho pravé straně, a uloží ji do proměnné, která je výsledkem operace na jeho levé straně. Ve většině případů je na levé stran rovnítka pouze název proměnné, ale obecně zde může být cokoliv, co jednoznačně definuje oblast paměti, kam se má hodnota výrazu na pravé straně uložit. Příklady použití tohoto operátoru najdete ve výpisu 4.1.
Přiřazení je výraz U operátoru přiřazení je dobré vést v patrnosti, že v Javě (a obecně v jazycích odvozených přímo či nepřímo z jazyka C) je přiřazení výraz, jehož výsledem je přiřazovaná hodnota. Občas se s takovýmto použitím přiřazení můžete setkat. Neříkám, že takovéto použití je vždy to nejlepší, ale je dobré o něm vědět, abyste nebyli překvapeni, až na ně v programu narazíte. Ve výpisu 4.1 je takovéto použití předvedeno na řádku 5. Již jsem se ve studentských programech několikrát setkal s tím, že student omylem zadal místo rovnítka znak mínus (rovnítko je na české klávesnici tam, kde je na americké znak mínus), přehlédl tuto chybu (některé písma při dostatečném zmenšení tyto znaky příliš neodliší) a pak se divil, proč se jeho program chová tak divně. Výpis 4.1: 1 2 3 4 5 6 7 8 9 10 11 12 13 14
Použití přiřazení jako výrazu
jshell> i = 100; i ==> 100 | assigned to i : int jshell> j = 50 + (k = i - k); j ==> 130 | assigned to j : int
//Druhý sčítanec obsahuje přiřazení
jshell> /vars i j k | int i = 100 | int j = 130 | int k = 80 jshell>
V úryvku na řádku 5 se nejprve vyhodnotí výraz v závorkách, který do proměnné k vloží hodnotu rozdílu (i – k) = (100 – 20) = 80. Tuto hodnotu pak použije jako druhý sčítanec přičítaný k číslu 50 a výsledek uloží do proměnné j.
72_Java 21 – Kompletní příručka_ZLOM.doc; verze 1.02.9504_2023-11-08_st_17-14
Strana 98 z 641
Kapitola 4 Základní operátory
99
Všimněte si, že JShell na přiřazení nové hodnoty do proměnné k vůbec neupozornil. Toto přiřazení je totiž pouhým vedlejším efektem prováděné operace. Pamatujte, že JShell je sice pro vaše experimenty nástrojem velmi vhodným, ale v méně standardních situacích dokáže nepříjemně překvapit.
4.3 Unární + a Unární + a – jsou operátory, které nastavují znaménko svého operandu, který musí být číselného typu. Unární + je operátor, který vlastně nic nedělá, protože zachovává původní znaménko svého operandu. Používá se spíše pro zdůraznění anebo pro přehlednější formátování. Unární – mění znaménko svého operandu. Budu-li proto chtít změnit znaménko hodnoty uložené v proměnné xxx, napíšu příkaz xxx = -xxx;
Obdobně, když budu chtít předat metodě mtd v jejím parametru hodnotu proměnné xxx s opačným znaménkem, napíši mtd(-xxx);
4.4 Aritmetické operátory + - * / % Java definuje pět aritmetických operátorů: sčítání (+), odčítání (-), násobení (*), dělení (/) a získání zbytku po dělení (dělení modulo – %). Všechny tyto operátory jsou binární, tj. používají dva operandy – levý a pravý. Oba jejich operandy musejí být číselného typu. Operátor + smí mít i operandy typu String, ale tuto možnost rozeberu samostatně.
Operátor sčítání Operátor sčítání jsem v předchozím výkladu již několikrát použil. Operace sčítání vrací součet svých operandů. Sčítání stringů V Javě můžeme sčítat nejenom čísla, ale také stringy. Součtem dvou stringů je string obsahující znaky levého operandu následované znaky pravého operandu. I součet stringů jsme již použili – konkrétně v pasáži Literály typu String na straně 73 s ukázkou ve výpisu 2.8. 72_Java 21 – Kompletní příručka_ZLOM.doc; verze 1.02.9504_2023-11-08_st_17-14
Strana 99 z 641
100
Java 21 – Kompletní příručka jazyka
V souvislosti se sčítáním stringů je třeba upozornit na „oblíbenou“ chybu, kdy si programátor neuvědomí, že překladač mezi sčítance nevloží žádnou mezeru. Příklad najdete ve výpisu 4.2, kde je na řádku 1 takto definována proměnná s12, takže pak obsahuje slepenec, jak se můžete přesvědčit na řádku 6. Na řádku 9 je opravené přiřazení, při němž se mezi dva stringy vkládá mezera. Většinou bývá ale výhodnější použít řešení z řádku 13, kde se oddělující mezera stane součástí jednoho ze sčítanců. Výpis 4.2: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
Sčítání stringů
jshell> String s1="Dobrý", s2="den", s12=s1+s2; s1 ==> "Dobrý" | created variable s1 : String s2 ==> "den" | created variable s2 : String s12 ==> "Dobrýden" | created variable s12 : String jshell> s12 = s1 + " " + s2; s12 ==> "Dobrý den" | assigned to s12 : String jshell> s1 = "Dobrý "; s12 = s1+s2; s1 ==> "Dobrý " | assigned to s1 : String s12 ==> "Dobrý den" | assigned to s12 : String jshell> _String = "i=" + i + ", j=" + j + ", k=" + k; _String ==> "i=100, j=130, k=80" | assigned to _String : String jshell>
Na řádku 19 je příkaz využívající toho, že Java umožňuje přičíst ke stringu cokoliv. Při použití operátoru plus platí, že je-li jeden ze sčítanců string, převede se i druhý sčítanec na string a výsledkem je string vzniklý součtem daných stringů. K tomuto tématu se ještě vrátím, až probereme operátor přetypování.
Operátor odčítání Operace odčítání vrací rozdíl vzniklý odečtením pravého operandu od levého tak, jak jste ze školy zvyklí. Některé programovací jazyky zavádějí operátor odčítání i pro stringy a další datové typy. Java ale mezi ně nepatří – zde můžete stringy pouze sčítat.
72_Java 21 – Kompletní příručka_ZLOM.doc; verze 1.02.9504_2023-11-08_st_17-14 Ukázka elektronické knihy
Strana 100 z 641