Skip to content
ICT Fusion Knowledgebase

Functies en scope

Een functie is een herbruikbaar blok code dat een specifieke taak uitvoert. \ In plaats van dezelfde code te kopiëren, geef je het blok een naam en roep je het aan wanneer je het nodig hebt. \ Functies maken code overzichtelijker, herbruikbaar en makkelijker te testen.


Een functie definiëren en aanroepen

JavaScript gebruikt het sleutelwoord function; Python gebruikt def. \ De functie wordt pas uitgevoerd als je hem aanroept.

function begroet(naam) {
    return "Hallo, " + naam + "!";
}

let boodschap = begroet("Mona");
console.log(boodschap);  // Hallo, Mona!
def begroet(naam):
    return "Hallo, " + naam + "!"

boodschap = begroet("Mona")
print(boodschap)  # Hallo, Mona!
String begroet(String naam) {
  return "Hallo, " + naam + "!";
}

void setup() {
  Serial.begin(9600);
  String boodschap = begroet("Mona");
  Serial.println(boodschap);  // Hallo, Mona!
}

void loop() {}

Parameters en argumenten

Een parameter is de naam in de functiedefinitie. \ Een argument is de concrete waarde die je meegeeft bij het aanroepen.

function berekenOppervlak(breedte, hoogte) {
    return breedte * hoogte;
}

console.log(berekenOppervlak(5, 3));  // 15
def bereken_oppervlak(breedte, hoogte):
    return breedte * hoogte

print(bereken_oppervlak(5, 3))  # 15
int berekenOppervlak(int breedte, int hoogte) {
  return breedte * hoogte;
}

void setup() {
  Serial.begin(9600);
  Serial.println(berekenOppervlak(5, 3));  // 15
}

void loop() {}

Standaardwaarden

Parameters kunnen een standaardwaarde krijgen die geldt als er geen argument wordt meegegeven.

function begroet(naam = "gast") {
    return `Hallo, ${naam}!`;
}

console.log(begroet());        // Hallo, gast!
console.log(begroet("Mila"));  // Hallo, Mila!
def begroet(naam="gast"):
    return f"Hallo, {naam}!"

print(begroet())        # Hallo, gast!
print(begroet("Mila"))  # Hallo, Mila!
String begroet(String naam = "gast") {
  return "Hallo, " + naam + "!";
}

void setup() {
  Serial.begin(9600);
  Serial.println(begroet());        // Hallo, gast!
  Serial.println(begroet("Mila"));  // Hallo, Mila!
}

void loop() {}

Returnwaarde

Een functie kan een waarde teruggeven met return. \ Die waarde kun je opslaan in een variabele of direct gebruiken.

function som(a, b) {
    return a + b;
}

let resultaat = som(3, 4);     // 7
console.log(som(10, som(3, 4)));  // 17
def som(a, b):
    return a + b

resultaat = som(3, 4)          # 7
print(som(10, som(3, 4)))      # 17
int som(int a, int b) {
  return a + b;
}

void setup() {
  Serial.begin(9600);
  int resultaat = som(3, 4);          // 7
  Serial.println(som(10, som(3, 4))); // 17
}

void loop() {}

Scope

Scope bepaalt waar een variabele zichtbaar is. \ Variabelen aangemaakt buiten een functie zijn globaal (overal zichtbaar). \ Variabelen aangemaakt binnen een functie zijn lokaal (alleen zichtbaar in die functie).

let score = 100;  // globaal

function verhoog() {
    let bonus = 10;   // lokaal
    score += bonus;   // globale variabele aanpassen mag
}

verhoog();
console.log(score);  // 110
// console.log(bonus);  // ❌ ReferenceError: bonus is not defined
score = 100  # globaal

def verhoog():
    bonus = 10       # lokaal
    global score     # expliciet aangeven dat je de globale wilt wijzigen
    score += bonus

verhoog()
print(score)  # 110
# print(bonus)  # ❌ NameError: name 'bonus' is not defined
int score = 100;  // globaal

void verhoog() {
  int bonus = 10; // lokaal
  score += bonus; // globale variabele aanpassen mag
}

void setup() {
  Serial.begin(9600);
  verhoog();
  Serial.println(score); // 110
  // Serial.println(bonus); // ❌ bonus bestaat hier niet
}

void loop() {}

Korte / anonieme functies

Voor eenvoudige berekeningen bestaat een compacte schrijfwijze.

// Arrow function
const kwadraat = x => x * x;
console.log(kwadraat(4));  // 16

// Meteen gebruiken als argument
[1, 2, 3].map(x => x * 2);  // [2, 4, 6]
# Lambda
kwadraat = lambda x: x * x
print(kwadraat(4))  # 16

# Meteen gebruiken als argument
list(map(lambda x: x * 2, [1, 2, 3]))  # [2, 4, 6]
// Arduino ondersteunt geen lambda's zoals in Python/JavaScript in deze basisvorm.
// Vaak maak je dan een gewone hulpfunctie:
int kwadraat(int x) {
  return x * x;
}

void setup() {
  Serial.begin(9600);
  Serial.println(kwadraat(4));  // 16
}

void loop() {}

Samenvatting begrippen

Begrip Betekenis
Functie Herbruikbaar blok code met een naam
Parameter Naam in de functiedefinitie
Argument Concrete waarde bij het aanroepen
Return Geeft een waarde terug uit de functie
Standaardwaarde Waarde die geldt als er geen argument gegeven wordt
Scope Gebied in de code waar een variabele geldig is
Globaal Zichtbaar in het hele programma
Lokaal Alleen zichtbaar binnen de functie
Arrow function / lambda Compacte, anonieme functie