Scope

De scope van een variabele verwijst naar het deel van een programma waar de variabele toegankelijk is en gebruikt kan worden. In programmeren bepaalt de scope dus waar een variabele bekend en beschikbaar is voor bewerkingen. Dit is belangrijk voor het beheren van gegevens en het voorkomen van fouten in code.

Er zijn verschillende soorten scopes:

  1. Globale scope: Een variabele die globaal is gedefinieerd, is overal in het programma toegankelijk. Zodra een variabele buiten alle functies en blokken wordt gedefinieerd, wordt deze beschouwd als globaal.
  2. Lokale scope: Een lokale variabele wordt gecreëerd binnen een functie of een blok en is alleen toegankelijk binnen die functie of dat blok. Als je de functie of het blok verlaat, wordt de variabele niet meer herkend en kun je er niet meer mee werken.
  3. Blok scope: Binnen programmeertalen die dit ondersteunen (zoals C++ met de {} haakjes), is een variabele die binnen een blok (zoals een lus of een if-statement) wordt gedefinieerd, alleen binnen dat specifieke blok toegankelijk.

De scope van een variabele helpt bij het organiseren van de code en voorkomt conflicten tussen variabelen die mogelijk dezelfde naam hebben maar in verschillende delen van het programma worden gebruikt. Het zorgt ook voor efficiënt geheugengebruik, omdat lokale variabelen vrijgegeven worden wanneer hun scope eindigt.

Voorbeeld code

int x = 10; // Globale scope

void setup(){
  Serial.begin(115200);
  
  int y = 5; // Lokale scope
  Serial.println(y);
  Serial.println(x);
  Serial.println(k); // niet zichtbaar hier
  Serial.println(z); // niet zichtbaar hier
  Serial.println(j); // niet zichtbaar hier
}

void loop(){
  int k = 8; // Lokale scope
  Serial.println(y); // niet zichtbaar hier
  Serial.println(x);
  Serial.println(k);
  Serial.println(z); // niet zichtbaar hier
  Serial.println(j); // niet zichtbaar hier

  for (int j = 0; j < 100; j++) { // j heeft een blok scope
    Serial.println(y); // niet zichtbaar hier
    Serial.println(x);
    Serial.println(k);
    Serial.println(z); // niet zichtbaar hier
    Serial.println(j);
  }
  
  mijnFunctie();
}

void mijnFunctie(){
  int z = 0; // Lokale scope
  Serial.println(y); // niet zichtbaar hier
  Serial.println(x);
  Serial.println(k); // niet zichtbaar hier
  Serial.println(z);
  Serial.println(j); // niet zichtbaar hier
}

Toelichting voorbeeld
Serial.begin(115200) en Serial.println() zijn functies die het mogelijk maken gegevens op het scherm te zetten binnen het Arduino IDE programma.

Op de regels: 9, 10, 11, 16, 19, 20, 23, 26, 35, 37, 39 gaat het fout. Hier zijn de variabelen NIET zichtbaar en kun je ze dus ook niet gebruiken. Zou je dit programma in de Arduino IDE laden en compileren, geven deze regels errors.

Alle variabelen die buiten de setup()-functie en loop()-functie gemaakt worden, zoals x in het voorbeeld, zijn overal zichtbaar. Deze noemt men ook wel globale variabelen.