Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys

8.6.4 Muuttujien lokaalisuus

Kukin aliohjelma muodostaa oman kokonaisuutensa. Edellä olleissa esimerkeissä aliohjelmat eivät tiedä ulkomaailmasta mitään muuta, kuin sen, mitä niille tuodaan parametreinä kutsun yhteydessä.

Vastaavasti ulkomaailma ei tiedä mitään aliohjelman omista muuttujista. Näitä aliohjelman lokaaleja muuttujia on esim. seuraavassa:

	  private static int pituus_ja_muuta(StringBuffer s)
	  {
	    int pit = s.length();
	    s.delete(0,pit).append("toka"); // pääohjelman jono muuttuu nyt
	    return pit;
	  }

	s    -  aliohjelman parametrimuuttuja (tässä tapauksessa viite merkkijonoon).
	pit  -  aliohjelman lokaali apumuuttuja pituuden säilyttämiseksi

Yleensäkin Java- kielessä lausesulut { ja } muodostavat lohkon, jonka ulkopuolelle mikään lohkon sisällä määritelty muuttuja tai tyyppimääritys ei näy. Näkyvyysalueesta käytetään englanninkielisessä kirjallisuudessa nimitystä scope. Lokaaleilla muuttujilla voi olla vastaava nimi, joka on jo aiemmin esiintynyt jossakin toisessa yhteydessä. Lohkon sisällä käytetään sitä määrittelyä, joka esiintyy lohkossa:

java-muut\Lokaali.java - lokaalien muuttujien näkyvyys

	/**	:-(
	 * Testataan Javan muuttujien lokaalisuutta
	 * @author  Vesa Lappalainen
	 * @version 1.0, 13.01.2003
	 */
	public class Lokaali {
	
	  static private char ch='A';
	
	  static private void ali() {
	    double ch = 4.5;
	    System.out.println("Reaaliluku " + ch);
	  }	
	  
	  public static void main(String[] args) {
	    System.out.println("Kirjain " + ch);
	    {
	      int ch = 5;
	      System.out.println("Kokonaisluku " + ch);
	      ali();
	    }
	    System.out.println("Kirjain " + ch);
	  }
	
	}

Ohjelma tulostaa:

	Kirjain A
	Kokonaisluku 5
	Reaaliluku 4.5
	Kirjain A

Saman tunnuksen käyttäminen eri tarkoituksissa on kuitenkin kaikkea muuta kuin hyvää ohjelmointia.

Tehtävä 8.19 Eri nimet

Korjaa edellinen ohjelma siten, että kullakin erityyppisellä muuttujalla on eri nimi.


Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys