Bruk av prosedyrar og funksjonar

Dette avsnittet handlar om den grunnleggjande bruken av prosedyrar og funksjonar i LibreOffice Basic.

Merknadsikon

NÄr du lagar ein ny modul, vil LibreOffice Basic automatisk setja inn ein SUM med namnet «Main». Dette standardnamnet har ingenting Ä gjera med rekkjefÞlgja eller startpunktet for eit LibreOffice Basic-prosjekt. Du kan endra namnet pÄ denne subrutinen til kva som helst.


Merknadsikon

Det er ein del restriksjonar pÄ kva namn du kan bruka for «public» variablar, subrutinar og funksjonar. Du kan ikkje bruka same namnet som er brukt pÄ ein av modulane i det same biblioteket.


Bruk av prosedyrar (SUBS) og funksjonar (FUNCTIONS) vil hjelpa deg med Ă„ halda ei strukturell oversikt ved at programmet vert inndelt i logiske bitar.

Ein annan fordel med prosedyrar og funksjonar er at nÄr dei fÞrst er skrivne, kan dei ogsÄ brukast i andre prosjekt.

Å overfþra variablar til prosedyrar (SUB) og funksjonar (FUNCTION)

Variablar kan verta overfÞrte bÄde til prosedyrar og funksjonar. SUB og FUNCTION mÄ vera definerte til Ä kunne ta i mot parametrar:


Sub SubName(Parameter1 As Type, Parameter2 As Type,...)
Programkode
End Sub

Ein SUB vert kalla opp med denne syntaksen:


SubName(Value1, Value2,...)

Parametra som vert overfÞrte til ein SUB mÄ vera av same slag som er gjeven i deklarasjonen.

Det same gjeld for FUNCTION. I tillegg vil ein funksjon alltid returnera resultatet av funksjonen. Dette vert gjort ved Ă„ tilordna returverdien til funksjonsnamnet:


Function FunctionName(Parameter1 As Type, Parameter2 As Type,...) As Type
Programkode
FunctionName=Result
End Function

Funksjonen vert kalla opp med denne syntaksen:


Variabel = Funskajonsnamn(Parameter1, Parameter2, 
)
Tipsikon

Du kan ogsÄ bruka det fullstendige namnet for Ä kalla opp ein prosedyre eller ein funksjon:
Library.Module.Macro()
For eksempel kan du kalla opp makroen Autotext frÄ biblioteket Gimmics med denne kommandoen:
Gimmicks.AutoText.Main()


Å overfþra variablar som verdi eller referanse

Parameterar kan sendast til ein SUB eller ein FUNCTION anten som ein referanse eller som ein verdi. Dersom ingenting anna er spesifisert, vil ein parameter alltid verta overfĂžrt via ein referanse. Dette betyr at ein SUB eller ein FUNCTION mottar parameteren og kan lesa og endra verdien av denne.

Dersom du Þnskjer Ä overfÞre parameteren via ein verdi, set du inn ordet «ByVal» framfÞre parameteren nÄr du kallar opp ein SUB eller ein FUNCTION. Eksempel:


Result = Function(ByVal Parameter)

I dette tilfellet vert innhaldet i parameteren ikkje endra av FUNCTION sidan han berre fÄr verdien og ikkje sjÞlve parameteren.

VariabelomrÄde

Ein variabel som er definert inne i ein SUB eller ein FUNCTION er gyldig berre inne i prosedyren. Dette er det som vert kalla ein «lokal» variabel. Ofte har du i tillegg ogsÄ bruk for variablar som er tilgjengelege i heile programmet, inne i alle modulane og ogsÄ etter at ein SUB eller FUNCTION er avslutta.

Deklarering av variablar utanfor ein SUB eller ein FUNCTION


Global Variabelnamn As TYPENAME

Variabelen er gyldig sÄ lenge LibreOffice-Þkta varer.


Public Variabelnamn As TYPENAME

Variabelen er gyldig i alle modulane.


Private Variabelnamn As TYPENAME

Variabelen er berre gyldig innfĂžre denne modulen.


Dim Variabelnamn As TYPENAME

Variabelen er berre gyldig innfĂžre denne modulen.

Eksempel pÄ private variablar

Tving private variablar til Ä vere private pÄ tvers av modular med innstillinga CompatibilityMode(true).


' ***** Module1 *****
Private myText As String
Sub initMyText
    minTekst = "Hallo"
    Print "I modul1: ", minTekst
End Sub
 
' ***** Module2 *****
'Option Explicit
Sub demoBug
    CompatibilityMode( true )
    initMyText
    ' Returnerer nÄ ein tom streng
    ' (eller det oppstÄr feil for Option Explicit)
    Print "NĂ„ i modul2: ", minTekst
End Sub

Å lagra innhaldet av ein variabel etter at ein SUB eller FUNCTION er avslutta


Static Variabelnamn As TYPENAME

Variabelen beheld verdien sin til neste gong den same FUNCTION eller SUB vert brukt. Deklarasjonen mÄ avsluttast inne i ein SUB eller FUNCTION.

Spesifiserer returverdien for ein FUNCTION

Viss du vil definera returverdien for funksjonen, tek du med eit typedeklarasjonsteikn etter funksjonsnamnet eller typen indikert med «As». Skriv ogsÄ inn tilsvarande nÞkkelord pÄ slutten av parameterlista, for eksempel:


Function WordCount(WordText As String) As Integer