Waar kan ik mijn variabele gebruiken?
Een variabele heeft een naam en een gebied waarin je die naam kunt gebruiken. Dat gebied heet het bereik. Denk aan een kleine doos in een grotere doos: code zoekt namen eerst in de eigen doos en daarna in de omringende dozen. De kleine doos is een binnenste bereik.
Pliro gebruikt lexicaal bereik: de plaats in je geschreven code bepaalt welke dozen om elkaar zitten. Een functie ergens anders aanroepen verandert haar buitenste bereik niet. Lokale namen horen bij een blok of functie. Globale namen staan op programmaniveau, buiten die blokken.
Een declaratie maakt een naam. Pliro maakt die vanaf die plek beschikbaar. Sommige talen laten je latere declaraties al eerder gebruiken; dat heet hoisting. Pliro doet dat niet. Een functie mag zichzelf aanroepen: recursie. Bij wederzijdse recursie roepen twee functies elkaar aan; daarvoor een latere functiedeclaratie gebruiken wordt niet ondersteund. Ingebouwde namen, soms preludenamen genoemd, zijn al beschikbaar vóór je eigen declaraties.
Probeer een naam binnen een blok
De twee variabelen hieronder hebben dezelfde spelling, maar horen bij verschillende bereiken. Binnen het blok wordt de binnenste naam gebruikt; daarna weer de buitenste. Dat heet afschermen, of shadowing.
# taal: nl
laat bericht = "buiten"
als waar:
laat bericht = "binnen"
zeg bericht
zeg bericht
Voorspel eerst de volgorde. Je ziet binnen en daarna buiten. Een waarde veranderen met zet is iets anders dan een nieuwe binnenste variabele maken met laat.
Naamopzoeking begint in het binnenste bereik en gaat naar buiten. Blokken,
lusiteraties en functieaanroepen hebben lokale bereiken. zet wijzigt de
gevonden bestaande variabele; een lokale laat kan een buitenste naam afschermen.
Declaraties zijn zichtbaar vanaf hun plaats in de bron. Je kunt een functie
niet vóór haar declaratie aanroepen. Een functie ziet wel haar eigen naam en
kan dus direct recursief zijn. Wederzijds recursieve vooruitverwijzingen zijn
niet ondersteund. Onbekende namen en dubbele declaraties in één bereik zijn
controlefouten.
Ingebouwde namen vormen een afschermbaar buitenste bereik. Kies eigen namen
zorgvuldig: na een eigen laat zeg = ... verwijst zeg niet meer naar uitvoer.
Gerelateerde lemma’s
Syntaxis en waarden · Ingebouwde functies · Programmeergidsen
