SUB

Zie ook:  Functions and Subroutines,  BYREF

sub subName nul of meerdere door een komma gescheiden parameters of variabele namen
  'code for the sub goes in here
end sub

Beschrijving:
Dit statement bepaalt een subroutine.  Nul of meer parameters kunnen aan 
de subroutine worden doorgegeven.  Een subroutine kan geen andere subroutinedefinitie, 
noch een functiedefinitie bevatten.

Het CALL statement wordt gebruikt om toegang tot de SUBROUTINE te krijgen 
en waarden aan over te dragen.  De waarden moeten van hetzelfde type zijn 
als het SUB statement bepaalt dat ze moeten zijn.  Zie het volgende voorbeeld:

  

sub mySubName string$, number, string2$

wordt aldus opgeroepen:

call mySubName "string value", 123, str$("321")

Local Variables Elke variabele binnen een functie is plaatselijk geldig (locally scoped), dat betekent dat de (lokale) waarde van de variabele binnen een functie, verschilt van de waarde van een variabele met de zelfde naam buiten de functie. Passing by Reference (Variabelen meegeven met een verwijzing "naar een geheugen adres" ) Normaliter worden (de argumenten) variabelen die meegegeven worden aan een functie als een vaste waarde "by value" doorgegeven hetgeen betekent dat een exemplaar van de variabele in de functie wordt overgenomen. We zagen reeds dat de waarde van de variabele niet veranderd in het hoofdprogramma ook als het in de functie wel veranderd. De variabele in de functie was lokaal. Een variabele kan in plaats daarvan echter ook "byref" worden meegegeven hetgeen betekent dat een verwijzing naar de daadwerkelijke variabele (geheugenplek) wordt meegegeven, waardoor een verandering in de waarde van deze variabele in de functie nu wel tevens de waarde van de variabele in het hoofdprogramma verandert. Deze variabelen zijn (global scope) Global Variables and Devices Variabelen die met het GLOBAL statement worden gedeclareerd zijn beschikbaar in het hoofdprogramma en in subroutines en functies. Arrays, structs en handles van files, DLLs en vensters zijn "global" voor een Liberty BASIC programma, en zichtbaar binnen een functie en hoeven niet special aan die functie mee te worden gegeven. Speciale "global"status is gegeven aan enkele standaard variabelen die gebruikt worden om de grootte, positie en kleur van vensters en controls te regelen. Het betreft hier de variabelen voor WindowWidth, WindowHeight, UpperLeftX, UpperLeftY, ForegroundColor$, BackgroundColor$, ListboxColor$, TextboxColor$, ComboboxColor$, TexteditorColor$. De waarde van deze variabelen, als ook die van DefaultDir$ en com kunnen gezien worden en gewijzigd worden in elke subroutine/function. Branch Labels De aftak etiketten hebben een plaatselijk werkingsgebied. De code binnen een functie kan geen aftak etiketten buiten de subroutine zien, en de code buiten een functie kan geen aftak etiketten binnen om het even welke subroutine zien. Ending a Subroutine: De sub definitie moet eindigen met de uitdrukking: end sub Exit a Subroutine: De sub kan voortijdig worden verlaten met een "exit sub" statement. Executing Subroutines Wees er zeker van dat een programma niet toevallig een sub binnen kan stromen. Een subroutine zal slechts moeten worden uitgevoerd wanneer het op bevel van het programma wordt aangeroepen. fout: for i = 1 to 10 'do some stuff next i Sub MySub param1, param2 'do some stuff End Sub correct: for i = 1 to 10 'do some stuff next i WAIT Sub MySub param1, param2 'do some stuff End Sub Voorbeeld: Gebruik: 'copy two files into one fileOne$ = "first.txt" fileTwo$ = "second.txt" combined$ = "together.txt" call mergeFiles fileOne$, fileTwo$, combined$ end sub mergeFiles firstFile$, secondFile$, merged$ open merged$ for output as #merged open firstFile$ for input as #first print #merged, input$(#first, lof(#first)); close #first open secondFile$ for input as #second print #merged, input$(#second, lof(#second)); close #second close #merged end sub See also: FUNCTION, Recursion, Functions and Subroutines