# De structuur van een programma
## Inleiding programmastructuur

Een programma als één groot geheel is onoverzichtelijk. Daarom worden programma's verdeeld in logische blokken die een bepaalde functie uitvoeren. Zo'n blok noemen we een procedure. Procedures worden veel gebruikt bij objecten. Neem de volgende instructie:
Form1.Show
Als deze instructie wordt uitgevoerd, wordt de procedure Show van de component Form1 aangeroepen.
Maar je kunt ook zelf procedures schrijven om een bepaalde taak uit te voeren, bijvoorbeeld het uitvoeren van een ingewikkelde berekening of het openen van een bestand. Zo'n procedure schrijf je apart van je hoofdprogramma. Waar nodig roep je in het hoofdprogramma die procedure aan.
Procedures zijn er in drie soorten:
* Subroutines
* Functies
* Property-procedures

## Subroutines

Een subroutine is een procedure die geen waarde teruggeeft. Een voorbeeld:
WriteLine is een subroutine en is een onderdeel van de klasse Console.
Achter de naam van de subroutine kun je argumenten ofwel parameters opgeven: gegevens die aan de subroutine worden doorgegeven om te verwerken. Zo'n argument kan bestaan uit onder andere getallen, teksten of variabelen. Het type van elk argument moet overeenkomen met het type in de definitie van de Sub-instructie.
Nu een voorbeeld van een subroutine die je in je programma kunt gebruiken. Stel, je wilt tijdens het uitvoeren van je programma tekst naar een logbestand schrijven, zodat je later kunt zien wat er allemaal gebeurt is. Het schrijven naar het logbestand kun je gemakkelijk doen met onderstaande subroutine:
Het is nu abracadabra, maar het werken met bestanden, zoals hier gebeurt, wordt later in het handboek uitgebreid behandeld.
De eerste twee regels van de subroutine maken een variabele StreamWriter aan die verwijst naar het opgegeven bestand. De append in de tweede regel geeft aan dat de tekst moet toegevoegd worden aan het bestand. Als dit wordt weggelaten, wordt het bestand steeds overschreven en dat is hier niet de bedoeling.
De twee volgende regels voegen de tekst de aan het bestand en sluiten het bestand.
De subroutine wordt als volgt aangeroepen:
Steeds als je deze subroutine aanroept, wordt de opgegeven tekst toegevoegd aan het opgegeven bestand. Als het bestand nog niet bestaat, wordt een leeg bestand aangemaakt met de opgegeven naam.
Het is ook mogelijk om de naam van het bestand op te nemen in de subroutine, waardoor je bij de aanroep maar één parameter nodig hebt (de tekst), wat in principe eenvoudiger is. Maar door de bestandsnaam op te geven, kun je meerdere bestanden gebruiken. Zo kun je bijvoorbeeld een logbestand hebben met de voortgang en een tweede logbestand met de foutmeldingen, bijvoorbeeld:

## Functies

Een functie is een procedure die een waarde teruggeeft. Omdat een functie een waarde van een bepaald type teruggeeft, moet je ook het type van de functie aangeven.
Net als bij subroutines kun je ook bij functies argumenten meegeven tussen de haakjes van de aanroep.
Stel, je moet op diverse plaatsen in je programma een voornaam, eventueel tussenvoegsel en achternaam samenvoegen tot één geheel. Dit kun je doen met onderstaande functie:
In de declaratie van de functie worden de parameters vermeld tussen haakjes. Achter de haakjes staat As String. Dit geeft aan dat het type van de functie een string is.
Vervolgend wordt de variabele samengesteld aangemaakt en gevuld met de voornaam.
In de If-opdracht wordt gekeken of de lengte van het tussenvoegsel groter dan 0 is. In dat geval wordt het tussenvoegsel toegevoegd aan samengesteld.
Vervolgens wordt in de regel Return samengesteld de samengestelde naam teruggegeven en de functie beëindigd.
De functie wordt als volgt gebruikt:
Natuurlijk kun je als parameters variabelen gebruiken in plaats van strings (dat is ook normaal in een programma), bijvoorbeeld:

## Property-procedures

Een property-procedure is de procedure die wordt uitgevoerd wanneer een property (eigenschap) van een klasse wordt gelezen of gewijzigd. Omdat dit een onderdeel is van objecten, wordt het daar in het handboek behandeld.

## Exit Sub, Exit Function en Exit Property

Je kunt een procedure verlaten voordat je het einde bereikt met de Exit-instructie. Afhankelijk van het soort procedure gebruik je hiervoor Exit Sub, Exit Function of Exit Property. Het programma gaat dan verder met de volgende instructie na het aanroepen van de betreffende procedure. Een voorbeeld:
Meestal is het mogelijk om de code zo aan te passen dat de Exit-instructie niet nodig is. Dat is ook meestal een duidelijker manier van programmeren.