Erinevus lehekülje "Java:Muutujad" redaktsioonide vahel
195. rida: | 195. rida: | ||
(int)5.5 / 3 // => 5 / 3 = 1 | (int)5.5 / 3 // => 5 / 3 = 1 | ||
</source> | </source> | ||
+ | |||
+ | == Muutuja skoop == | ||
+ | |||
+ | Javas hakkab üldiselt muutuja kehtima sellest hetkest (reast), kui muutuja deklareeritakse. Enne deklareerimise rida muutujat kasutada ei saa: | ||
+ | |||
+ | <source lang="java"> | ||
+ | |||
+ | // .. | ||
+ | // System.out.println(x); <- annaks vea, kuna muutujat x pole deklareeritud | ||
+ | int x = 10; | ||
+ | System.out.println(x); // prindib 10, muutuja x on ilusti olemas | ||
+ | // .. | ||
+ | </source> | ||
+ | |||
+ | Muutuja kehtib alates deklareerimisest kuni selle ploki, mille sees see deklareeriti, lõpuni. Näiteks | ||
+ | <source lang="java" line> | ||
+ | public static void main(String[] args) { | ||
+ | int a = 10; | ||
+ | if (a > 5) { | ||
+ | int uus = 11; | ||
+ | System.out.println(uus); | ||
+ | } else { | ||
+ | // System.out.println(uus) annab vea | ||
+ | } | ||
+ | // System.out.println(uus) annab vea | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | <code>a</code> deklareeritakse 2. real ja ta kehtib <code>main</code> meetodi lõpuni (koodinäite lõpuni). Muutuja <code>uus</code> deklareeritakse <code>if</code>-lause sees (4. rida) ning ta lõppeb ära 6. real (<code>if</code> osa lõpus). Kui proovime muutujat <code>uus</code> kutsuda välja kas <code>else</code> osas või üldse peale <code>if</code> lause plokki, saaksime vea, kuna muutuja seal enam ei kehti. | ||
+ | |||
+ | == Klassimuutujad == | ||
+ | |||
+ | Kui te deklareerite funktsiooni/meetodi sees muutuja, on see n-ö lokaalne muutuja - see kehtib vaid selle funktsiooni sees. | ||
[[Category:Java juhend|Muutujad]] | [[Category:Java juhend|Muutujad]] |
Redaktsioon: 23. veebruar 2015, kell 00:31
Muutuja (ik variable) on nimeline viide mingile väärtusele, mis paikneb kuskil mälus. Näiteks võib muutuja nimi olla x ja see viitab väärtusele 5. Pseudokoodina võib kirjutada, et x = 5
(tegelikult samamoodi saab matemaatikas muutuja väärtust määrata). Kui edaspidi kuskil kasutatakse x'i, siis on selle väärtus 5. Näiteks x + 3
on väärtuse poolest sama mis 5 + 3
. Analoogselt võib mõelda näiteks Exceli lahtritele. Kui te seal kirjutate mingeid valemeid, siis teete seda selliselt: =A1 + B2. A1 ja B2 oleksid nagu muutujad, mille väärtus on vastavates lahtrites.
Javas on igal muutujal lisaks nimele ka andmetüüp. Kui näiteks Pythonis võib kirjutada x = 'tere'
ja seejärel kohe x = 3
, siis Javas tuleb kõigepealt muutuja tüüp määrata. Edaspidi tohib see muutuja ainult seda tüüpi andmeid hoida. Näiteks täisarvuline andmetüüp on int: int x = 3;
. Edaspidi koodis, kui ma olen juba x-ile andmetüübi määranud, saan ma kasutada lihtsalt muutujat (ilma andmetüübita): x = 4;
. Viimane näide oli selline, kus deklareeriti muutuja x ning sellele anti kohe väärtuseks 3. Seejärel muudeti x'i väärtus 4-ks.
Sama nimega muutujaid tohib olla vaid üks. Kui koodis on deklareeritud muutuja x, siis rohkem selles koodiosas ei tohis x-nimelist muutujat olla.
Andmetüübid
Andmetüübid Javas jagunevad kahte suuremasse klassi: primitiivsed andmetüübid ja objektid. Esialgu vaatleme primitiivseid andmetüüpe. Primitiivsete andmetüüpide korral kehtib reegel, et muutujal on konkreetne väärtus. Hiljem objektide puhul näeme, mismoodi see on erinev.
All tabelis on välja toodud erinevad primitiivsed andmetüübid Javas:
Tüübi nimi | Suurus | Väärtused | Näide |
---|---|---|---|
byte | 1 bait (8 bitti) | -128..127 | byte b = 42; |
short | 2 baiti (16 bitti) | -32768..32767 | short s = -12345; |
int | 4 baiti (32 bitti) | -2 147 483 648 (-2^31).. 2 147 483 647 (2^31 - 1) | int i = 10; |
long | 8 baiti (64 bitti) | -2^63 .. (2^63 - 1) | long l = -100; |
float | 32-big floating point | * | float f = 3.14f; |
double | 64-bit floating point | * | double d = 1.2345; |
boolean | 1 bitt | true, false | boolean b = true; |
char | 16-bit character | 'a', 'b', ... | char c = 'a'; |
Muutuja deklareerimine, väärtustamine
Muutuja deklareerimine ehk muutuja tutvustamine programmile käib selliselt:
[andmetüüp] [muutujanimi];
või
[andmetüüp] [muutujanimi] = [algväärtus];
Näiteks:
int y;
int x = 10;
Edaspidi igal ajal koodis võib muutuja väärtust muuta:
y = 1;
x = 3;
Muutujate nimetamine
Java keeles lubatud muutuja nimed: N, n, x15, a_long_name, time_is_$, HelloWorld. Muutuja nimi on tõstutundlik, ehk siis kõik järgmised on erinevad muutujad: HelloWorld, helloWorld, helloworld, HELLOWORLD, HeLLoWoRLd. Keelekonstruktsioonide nimetused on reserveeritud, seetõttu nimed nagu class, public, static, if, else jne ei ole lubatud.
Kuigi Javas on lubatud väga erinevad nimekujud, on soovitatav järgida neid reegleid:
- muutuja nimi peaks olema mõistlik (temperature, speed mitte a, b)
- nimi peaks algama väikese tähega
- kasutada tuleks täisnimetusi (temperature, mitte temp)
- kui nimi koosneb ühest sõnast, siis kasutada läbivat väiketähte: weight, speed.
- kui nimi koosneb kahest või rohkemast sõnast, siis kirjutatakse sõnad kokku ning alates teisest sõnast iga sõna esimene täht peaks olema suur: playAgain, currentSpeed.
Kuna keelekonstruktsioonid on kõik inglisekeelsed (if, while, class jne), siis on soovitatav kasutada inglisekeelseid muutujanimesid (speed, mitte kiirus). Igal juhul võiks loogika olla läbi koodi sama: kui alustasite eestikeelsete muutujanimedega, siis peaks sama loogika kehtima lõpuni. See, kus mõned muutujad on eestikeelsed ja mõned inglisekeelsed, on väga halb komme.
Konstandid
Konstandid on erilisttüüpi muutujad. Nad on samamoodi andmetüübiga ja nimega viited mingile väärtusele. Erinevus tavalisest muutujast on see, et konstandi väärtust ei saa hiljem enam muuta. Konstandi nimetamise reelgid on mõnevõrra erinevad tavamuutujast:
- kõik tähed nimes on suurtähed: PI, SPEED.
- sõnad on eristatud alakriipsuga (_): SPEED_OF_LIGHT, NUMBER_OF_GEARS.
Konstandi saab luua klassi päises (enne meetodeid/funktsioone):
public static final double PI = 3.14;
Aga konstantidest räägime täpsemalt mõnevõrra hiljem. Praeguses tekstis on konstandid mainitud nimetamise tõttu.
Operatsioonid, tehted
Muutuja suurendamine/vähendamine ühe võrra:
y = x++
(x suurendatakse peale omistamist)- y = x
- x = x + 1
y = ++x
(x suurendatakse enne omistamist)- x = x + 1
- y = x
x += y
x = x + y
Tehete järjekord (mis vastus on?):
x = 2 + 3 * 6;
x = (2 + 3) * 6;
Jagamine, jääk
Kui argumendid on täisarvud, on ka tulemus täisarv (võetakse täisosa, mitte ei ümardata):
- 6 / 5 = 1
- 3 / 5 = 0
- 10 / 5 = 2
Kui vähemalt üks argumentidest on komaga arv, on tulemus ka komaga arv:
- 6.0 / 5 = 1.2
- 3 / 5.0 = 0.6
- 10.0 / 5.0 = 2.0
Jääk jagamisel (%):
- 22 % 5 = 2 (22 / 5 on 4, jääk on 2)
- 5 % 5 = 0
- 3 % 5 = 3
Jäägist võib mõelda nii, et kui meil on 22 õuna ja peame need 5 inimese vahel jagama (õunu katki ei tohi teha), siis mitu õuna jääb üle. Või kui meil on 3 õuna, siis 5-le inimesele jagatuna saab igaüks 0, 3 jääb üle.
Cast'imine
Kui muutujat on vaja kasutada teise andmetüübina, võib kasutada cast'imist. Näiteks täisarvude puhul saab kasutada, et saada "normaalne" tulemus.
x = 8; y = 5; x / y = 1
(aga tahaksime saada 1.6)
Cast'imine ei muuda muutuja väärtust.
Cast'imise süntaks:
([uus-tüüp])[muutuja-nimi-või-väärtus];
Näide: <source lang="java"> (double)8/5; // => 1.6 x = 5; y = 2; x / y; // => 5 / 2 = 2 (double)x / y // => 5.0 / 2 = 2.5 x / y; // => 5 / 2 = 2 (int)5.5 / 3 // => 5 / 3 = 1 </source>
Muutuja skoop
Javas hakkab üldiselt muutuja kehtima sellest hetkest (reast), kui muutuja deklareeritakse. Enne deklareerimise rida muutujat kasutada ei saa:
<source lang="java">
// .. // System.out.println(x); <- annaks vea, kuna muutujat x pole deklareeritud int x = 10; System.out.println(x); // prindib 10, muutuja x on ilusti olemas // .. </source>
Muutuja kehtib alates deklareerimisest kuni selle ploki, mille sees see deklareeriti, lõpuni. Näiteks <source lang="java" line> public static void main(String[] args) { int a = 10; if (a > 5) { int uus = 11; System.out.println(uus); } else { // System.out.println(uus) annab vea } // System.out.println(uus) annab vea } </source>
a
deklareeritakse 2. real ja ta kehtib main
meetodi lõpuni (koodinäite lõpuni). Muutuja uus
deklareeritakse if
-lause sees (4. rida) ning ta lõppeb ära 6. real (if
osa lõpus). Kui proovime muutujat uus
kutsuda välja kas else
osas või üldse peale if
lause plokki, saaksime vea, kuna muutuja seal enam ei kehti.
Klassimuutujad
Kui te deklareerite funktsiooni/meetodi sees muutuja, on see n-ö lokaalne muutuja - see kehtib vaid selle funktsiooni sees.