Spremenljivka

Iz MaFiRaWiki

GFDL Avtor tega članka je študent/ka BarbaraNovak.

Pripravil/a ga je pri predmetu Računalništvo 2 (FMF PRA).


Kljub temu ste vsi vabljeni k urejanju in popravkom, saj je bistvo wikija ravno v sodelovalnem delu.

Vsebina

Pravila za delo s spremenljivkami

Spremenljivka je količina, katere vrednost se med izvajanjem programa lahko spreminja. Določimo jo tako, da zapišemo njeno ime, enačaj in vrednost. Za ime ne smemo uporabiti rezerviranih besed. Spremenljivko je treba deklarirati s čimer rezerviramo prostor v računalniškem pomnilniku. To storimo tako, da zapišemo podatkovni tip, ki določa velikost in ime spremenljivke. Nato ji priredimo še vrednost npr.:

  int x; x = 1;

Spremenljivke lahko deklariramo tudi v skupinah, katerim določimo začetne vrednosti. Zapišemo podatkovni tip spremenljivke in vsa željena imena spremenljivk takole:

  int i,j,k; ali int i = 1, j = 2, k = 0;

Uporabimo lahko poljubne vrste podatkovnih tipov: nize, realna in cela števila ter logične vrednosti. Poljubni osebi npr. določimo starost (celo število), ji dodamo ali spremenimo ime (niz) ipd.

  oseba1_roj = 1980;
  oseba1_ime = "Mojca";

Imena spremenljivk

Pri imenovanju spremenljivk moramo upoštevati naslednja navodila. Prva črka v imenu spremenljivke je lahko poljubna črka abecede, podčrtaj (_) ali simbol $. Za temi znaki lahko uporabimo tudi številke, npr. peter_12 ipd. Presledki so prepovedani.

POMEMBNO: Spremenljivkam navadno dodelimo smiselna imena (rezultat, produkt ipd.) in jih zapišemo z malimi črkami.


Rezervirane besede

Ker prevajalnik rezervira nekaj besed za svoje potrebe, se moramo pri imenovanju spremenljivk le-tem izogniti. V Javi ne smemo uporabljati naslednjih razerviranih besed:
abstract else long switch
bolean extends native synchronized
break final new this
byte finally null throw
case float package throws
catch for private transient
char goto protected try
class if public void
const implements return volatile
continue import short while
default instanceof static
do int strictfp
double interface super

Primitivni podatkovni tipi

Preden uporabimo spremenljivko, moramo zanjo rezervirati del računalnikovega pomnilnika. To količino določa t.i. podatkovni tip. Celo število tipa int (Integer) zasede npr. štiri bajte, realno osem itn.

V Javi imamo na voljo osem primitivnih podatkovnih tipov, imena razredov in polja. Primitivni podatkovni tipi, ki so vgrajeni v sam jezik, in niso del nobenega objekta, so znaki (character), števila različnih velikosti in logične (boolean) vrednosti.

  • Cela števila
Naravna, cela števila (integer) sestavljajo štiri podskupine:
  • byte je število, ki zasede en bajt. Največja vrednost števila je 255 (28),
  • short je sestavljen iz dveh bajtov,
  • int iz 4 bajtov,
  • long pa omogoča uporabo števil, ki niso večja od osmih bajtov.
Celo število ima privzeti podatkovni tip int, v tip long pa ga spremenimo tako, da za število dodamo črko l ali L:
   0x123456789ABCDEFL.
  • Realna števila
Realna števila so sestavljena iz celega števila in decimalne vrednosti, ki ju ločimo z decimalno piko. Če želimo, jih lahko zapišemo v eksponenti obliki, z znakom e ali E:
    12.16+E20 (12.16 * 1020).  
Realna števila sestavljata dve podskupini
  • podatkovni tip z enojno (float) natančnostjo ali
  • podatkovni tip z dvojno natančnostjo (double).
Prvi podatkovni tip zasede 4 bajte računalnikovega pomnilnika, drugi pa 8.
  Največji in najmanjši vrednosti prvega realnega števila sta -2^24E-149 oz. 2^24E104.
  Drugega pa -2^53E-1045 oz. 2^53E1000. 
Realno število je v osnovi število z dvojno natančnostjo, v število podatkovnega tipa float pa ga pretvorimo s črko F ali f, ki jo zapišemo za številom:
  12.3F.
  • Logične (Booleanove) vrednosti
Logične ali Booleanove vrednosti najpogosteje uporabljamo v logičnih stavkih, kjer preverjamo, ali je vrnjena vrednost resnična (true) ali neresnična (false). Če je na primer neka vrednost večja od zapisane, se izvede en del programa, v nasprotnem pa drugi del.
  • Znak
Spremenljivko lahko predstavlja en sam znak (character). Znak zapišemo med dva enojna narekovaja, npr. 'P'. S simbolom \ lahko prikažemo tudi posebne, ubežne (escape) znake, ki jih ne najdemo na tipkovnici. Znak za novo vrstico lahko zapišemo v obliki '\n'.
Koda Pomen Koda Pomen
\\ Znak \ (backslash) \n Nova vrstica (LF)
\f Novi list (FF) \r Začetek vrstice (CR)
\' Enojni narekovaj \t Tabulator (Tab)
\" Dvojni narekovaj \udddd Unicode znak, predstavljen s šestnajstiškima številoma.
\b Povratek (backspace) \ddd Unicode znak, predstavljen s tremi osniškimi števili.

Konstante

Konstante prištevamo med spremenljivke. So količine, ki jim med izvajanjem programa ne moremo spreminjati vrednosti. V programu bi lahko namesto konstante večkrat zapisali isto število, toda temu načinu pisanja se raje izognemo. Konstanto najavimo tako, da pred najavo napišemo rezervirano besedo final.

  final int fakt = 2.54;

Doseg spremenljivk

Spremenljivka ima območje veljavnosti: od deklaracije do konca bloka. Spremenljivko lahko deklariramo kjerkoli v bloku ukazov, najpogosteje na začetku. Velja pa le v bloku v katerem je deklarirana. Blok se začne z zavitim oklepajem { in konča s pripadajočim zavitim zaklepajem }. Primer:

  1. {
  2. int x = 5;
  3. int y = 12;
  4.  
  5. if (x > y) {
  6. int t = x;
  7. x = y;
  8. y = t;
  9. }
  10.  
  11. int t = (2 + x) / y;
  12. }

Ta program je sestavljen iz enega velikega bloka (vrstice od 1 do 12), v njem pa je vgnezden še en blok (vrstice od 6 do 8).

Spremenljivke v Javi so lokalne. To pomeni, da spremenljivka obstaja le od deklaracije do zaključka bloka, v katerem je deklaracija vsebovana. V zgornjem programu je veljavnost spremenljivk naslednja:

  • spremenljivka x je veljavna v vrsticah 2 do 12
  • spremenljivka y je veljavna v vrsticah 3 do 12
  • spremenljivka t je veljavna v vrsticah 6 do 8
  • spremenljivka t je veljavna v vrsticah 11 do 12

Zunaj območja veljavnosti spremenljivke preprosto ni! Ko prevajalnik prevede program, rezervira lokacijo v pomnilniku za vsako spremenljivko, vendar samo začasno. Preden spremenljivka postane veljavna in ko ni več veljavna, lahko prevajalnik porabi isto lokacijo za kako drugo spremenljivko.

Iz zgornjega programa se lahko naučimo še nekaj: v vrsticah od 6 do 8 je veljavna spremenljivka t, v vrsticah od 11 do 12 pa druga spremenljivka, ki se tudi imenuje t. To je seveda mogoče, ker se območji veljavnosti za ti dve spremenljivki ne prekrivata. Zapomnimo si, da sta to povsem različni spremenljivki.

Pomembno:

  • Spremenljivke v Javi so lokalne.
  • Spremenljivka je veljavna od deklaracije do konca bloka, v katerem je deklarirana.
  • Različne spremenljivke imajo lahko isto ime, če se njihova območja veljavnosti ne prekrivajo.
  • Poleg lokalnih spremenljivk poznamo še ostale tipe spremenljivk:
  • Globalna spremenljivka je tista spremenljivka razreda, ki jo ustvarimo v bloku razreda, recimo v zanki,...
  • Parameter postopka je prav tako spremenljivka, katere vrednost lahko uporabimo le znotraj postopka.
  • Spremenljivke izjem so spremenljivke, ki so vidne znotraj zaščitenih blokov izjem.

Dostopnost spremenljivk

Spremenljivkam lahko, tako kot razredom, določimo večje število preoblikovalcev, kateri določajo njihovo dostopnost in druge lastnosti. Preoblikovalci dostopnosti omogočajo izbiro razredov, ki lahko uporabljajo spremenljivke.

Poznamo naslednje preoblikovalce:

  • private (spremenljivko ali postopek) lahko uporabimo le v razredu, v katerem smo ga najavili. V vseh drugih razredih in podrazredih je tako označeni člen neviden.
  • protected lahko spreminjamo samo v samem razredu, podrazredu in razredih istega paketa.
  • public dostop do tako najavljenega člena razreda imajo vsi razredi v vseh paketih.
  • package omeji dostopnost do členov razreda nekoliko bolj kakor preoblikovalec protected, saj prepoveduje dostop do členov iz podrazredov.
  • final spremeni označeno lastnost v konstanto. To najpogosteje uporabljamo v povezavi s pridevnikom static.
  public static final double palec = 2.54;
  • static: Z rezervirano besedo static najavimo statično spremenljivko. Prednost statične spremenljivke je v tem, da nam za njeno uporabo ni potrebno kreirati novega objekta.
  • transient je namenjen težjim tehnikom programiranja. Oznako transient uporabljamo pri pisanju in branju objektov med samim izvajanjem programa.
  • volatile je prav tako namenjen težjim tehnikom programiranja. Je posebna oznaka, namenjena zaščiti lastnosti in postopkov pred nekaterimi optimizacijskimi programi.

Pri ustvarjenju objektov iz razreda se vsakokrat ustvarijo nove lastnosti in postopki, ki pa ne vplivajo na vrednost drugih razredov. Vsak objekt prejme lasten izvod spremenljivke. Število spremenljivk narašča s številom objektov. V nekaterih primerih je bolje, da ustvarimo namesto izvodne t.i. razredno spremenljivko. V pomnilniku se tedaj zanjo le enkrat rezervira prostor, njeno vrednost pa lahko uporabljajo vsi objekti, ki so izpeljani iz tega razreda.

Primeri za spremenljivko tipa int

Kako spremenljivki tipa int prištevamo, odštevamo, zmnožimo, delimo z dano vrednostjo?

  x += y  --> x = x + y
  x -= y  --> x = x - y
  x *= y  --> x = x * y
  x /= y  --> x = x / y
  x %= y  --> x = x % y

Kako spremenljivko tipa int povečamo ali zmanjšamo?

  i++  --> i = i + 1
  i--  --> i = i - 1

Preprosti primer programa, ki ponazarja, kako delamo s spremenljivkami npr.: kako zamenjamo vrednost dveh spremenljivk

  1. public class Menjava {
  2. public static void main(String[] args) {
  3. int x = 10;
  4. int y = 5;
  5. System.out.println("Izpis pred menjavo:");
  6. System.out.println("x = " + x);
  7. System.out.println("y = " + y);
  8. int z;
  9. z = x;
  10. x = y;
  11. y = z;
  12. System.out.println("Izpis po menjavo:");
  13. System.out.println("x = " + x);
  14. System.out.println("y = " + y);
  15. System.out.println("z = " + z);
  16. }
  17. }

Izpis:

 > java Menjava
   Izpis pred menjavo:
   x = 10
   y = 5
   Izpis po menjavo:
   x = 5
   y = 10
   z = 10
 >

Glej tudi

Osebna orodja