Modul
Indhald
Innhaldsliste 🔎︎

# Bruk av prosedyrar og funksjonar

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

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.

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, …)

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