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