1.1-Introductie-Programmeren

Theorie Variables 3

Competentie: Ik begrijp wat de scope van een variabele is.

Specifieke leerdoelen:

Inleiding

Misschien heb je al gemerkt dat het soms best even puzzelen is waar je variabelen aanmaakt en vanaf welke plekken je er dan allemaal bij kunt. Soms is dat ook knap onhandig allemaal! Een variabele heeft maar een beperkt bereik (scope) en eigenlijk is het idee vrij eenvoudig en simpel

Blokken code.

Je code bestaat uit heel veel blokken. Een blok is een stuk code dat begint met een accolade openen { en eindigt met een accolade sluiten }. Het lastige aan dit concept is dat je ook heel veel blokken in blokken hebt. Ga maar na welke blokken je allemaal in onderstaande voorbeeld hebt.

public class Application implements Runnable {

    public static void main(String[] args) {
        SaxionApp.start(new Application(), 1024, 768);
    }

    public void run() {
        int getal = 10;
        int getal2 = sum(5, 2);

        if (getal < getal2) {
            SaxionApp.printLine("Getal 1 is kleiner dan getal 2");
        } else {
            SaxionApp.printLine("Getal 2 is kleiner dan getal 1");
        }
    }

    public int sum(int x, int y) {
        return x + y;
    }
}

Zie je ze allemaal? Hier komen ze:

  1. Een blok voor de hele class, vanaf de eerste regel tot de laatste.
  2. Een blok waarin de inhoud van de main methode staat.
  3. Een blok waarin de inhoud van de run methode staat.
  4. Een blok dat alleen wordt uitgevoerd als getal1 kleiner is dan getal2.
  5. Een blok dat alleen wordt uitgevoerd als getal1 groter of gelijk aan getal2 is.
  6. Een blok waarin de inhoud van de sum methode staat beschreven.

Kortom: Je code bestaat uit veel blokken en blokken kunnen worden genest (dus een blok kan in een ander blok zitten). Bij het uitvoeren van een programma zal een blok “gewoon” van boven naar beneden uitgevoerd worden.

Hoe zit het dan met de scope?

Nou, een variabele bestaat alleen in het blok waarin je hem gemaakt hebt. Zodra het blok eindigt is je variabele ook weg. Natuurlijk bestaat de variabele ook pas in de regels nadat je hem gemaakt hebt. Ingewikkeld? Nee hoor, We leggen het uit aan de hand van het stukje code hierboven.

Een goed gebruik is om variabelen een zo klein mogelijke scope te geven, dus ze te maken binnen het blok waar je ze nodig hebt. Dat is lekker efficient voor het geheugengebruik van je programma, omdat hij steeds na een blok alle variabelen weer opruimt.

En verder?

Verder is één “truukje” nog wel handig. Als je een variabele wilt hebben die je in je hele programma kunt gebruiken (dus in alle methodes), dan kun je hem bovenaan in je programma aanmaken, direct onder de eerste regel. Dit noem je een globale variabele. Dus bijvoorbeeld zo:

public class Application implements Runnable {
    ArrayList<String> names = new ArrayList<String>();
    public static void main(String[] args) {
        SaxionApp.start(new Application(), 1024, 768);
    }
    public void run() {
        //Je kunt nu hier bij de lijst namen
        names.add("Mary");
        names.add("John");
        names.add("Rachel");
        String name = bepaalEerste();
    }
    public String bepaalEerste() {
        //En hier ook!
        if (names.size() > 0) {
            return names.get(0);
        }
        return "";
    }
}

Let erop dat je hier voorzichtig mee bent, omdat je variabelen altijd een zo klein mogelijke scope wilt geven. Ga dus niet klakkeloos alle variabelen als globaal boven in je programma zetten. Doe het alleen als het echt noodzakelijk is.