Innhald
Innhaldsliste 🔎︎

# Bruka prosedyrar, funksjonar og eigenskapar

Her er ein omtale av grunnlaget for bruk av prosedyrar, funksjonar og eigenskapar i LibreOffice Basic.

Når du lagar ein ny modul, set LibreOffice Basic automatisk inn ein Sub med namnet «Main». Dette standardnamnet har ingenting med rekkjefølgja eller startpunktet for eit LibreOffice Basicprosjekt. Du kan trygt gje Sub-rutinen eit anna namn.

Set er nokre avgrensingar for kva namn du kan bruka på PUBLIC-variablar, subrutinar, funksjonar og eigenskapar. Du kan ikkje bruka det same namnet som ein av modulane i det same biblioteket.

Prosedyrar (Sub-rutinar) funksjonar (Function) og eigenskapar (Property) er til hjelp for å halda eit strukturert oversyn ved å dela programmet opp i logiske delar.

Ein fordel med prosedyrar, funksjonar og eigenskapar er at når du har laga ein programkode som inneheld aktivitetskomponentar, kan du bruka denne koden i eit anna prosjekt.

## Overføra variablar mellom prosedyrar, funksjonar og eigenskapar

Variablar kan overførast til både prosedyrar, funksjonar og eigenskapar. Sub, Function eller Property må vera deklarerte for å kunna innehalda parametrar.

      Sub SubName(Parameter1 As TYPENAME, Parameter2 As TYPENAME,...)
          ' her kjem koden din
      End Sub

Sub vert kalla opp med denne syntaksen:

      [Call] SubName( [Parameter1:=]Value1, [Parameter2:=]Value2, ...)

Parametera som skal overførast til Sub må passa med dei deklarerte for Sub.

Den same prosessen overført til Function. I tillegg returnerer ein funksjon alltid eit resultat. Resultatet av ein funksjon vert definert ved å tilordna returverdien til funksjonsnamnet:

      Function FunctionName(Parameter1 As TYPENAME, Parameter2 As TYPENAME,...) As TYPENAME
          ' her kjem koden din
          FunctionName=Result
      End Function

Function vert kalla opp med denne syntaksen:

      Variable = FunctionName( [Parameter1:=]Value1, [Parameter2:=]Value2, ...)

Eigenskapane kombinerer syntaksen for prosedyrar og funksjonar. Ein eigenskap treng til vanleg opp til éin parameter.

      Private _IsApproved As TYPENAME
      Property Get IsApproved As TYPENAME
          ' her kjem koden din
          IsApproved = some_computation
      End Property
      Property Let IsApproved(value As TYPENAME)
          ' her kjem koden din
          _IsApproved = computed_value
      End Property

Property vert kalla opp med denne syntaksen:

      var = IsApproved
      IsApproved = some_value

Du kan også bruka det fullstendige namnet til å kalla opp ein prosedyre, funksjon eller eigenskap:
[Call] Library.Module.Macro() der Call er valfri.
For eksempel kan du kalla opp Autotext-makroen frå Gimmicks-biblioteket, med denne kommandoen:
Gimmicks.AutoText.Main()

## Å overføra variablar som verdi eller referanse

Du kan senda parametrar til ein prosedyre, ein funksjon eller ein eigenskap anten som referanse eller verdi. Med mindre anna er spesifisert, vert ein parameter alltid sendt som referanse. Det betyr at ein Sub, ein Function eller ein Property får parameteren og kan lesa og endra verdien.

Dersom du vil overføra ein parameterverdi, set inn nøkkelordet ByVal framføre parameteren når du gjer oppkall til for eksempel ein Sub, ein Function eller ein Property:

      Function ReadOnlyParms(ByVal p2, ByVal p2)
          ' her kjem koden din
      End Function
      result = ReadOnlyParms(parm1, parm2)

I dette tilfellet vert innhaldet i parameteren ikkje endra sidan Function får berre verdien og ikkje parameteren.

## Definera valfrie parametrar

Funksjonar, prosedyrar og eigenskapar kan definerast med valfrie parametrar, for eksempel

      Sub Rounding(number, Optional decimals, Optional format)
          ' her kjem koden din
      End Sub

## Posisjons- eller nøkkelord-argument

Når du kallar opp ein funksjon eller ein delrutine, kan du senda argumenta etter plassering eller namn. Å sende etter plassering betyr å lista opp argumenta i den rekkjefølgja parametera er definert i funksjonen eller delrutinen. Viss du sender etter namn, må du skriva inn namnet på parameteren med eit kolon og eit likskapsteikn etter (:=). Nøkkelordargument kan vera i kva rekkjefølgje som helst. Sjå eksempel på dette i Basic Replace()-funksjonen.

Når du har bruk for å senda færre parameterar, brukar du nøkkelordargument. Viss du sender verdiar for færre parameterar etter posisjon, må du setja inn verdiar for alle parametera før dei, valfritt eller ikkje. Dette sikrar at verdiane kjem på rett plass. Sender du parametera etter namn – ved hjelp av nøkkelordargument – kan du sløyfa alle andre mellomliggjande argument.

## Variabelområde

Ein variabel som er definert inne i ein Sub, Function eller Property 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, Function eller Property er avslutta.

### Definera variablar utanfor ein Sub, Function eller Property

    Global VarName As TYPENAME

Variabelen er gyldig så lenge LibreOffice-økta varer.

    Public VarName As TYPENAME

Variabelen er gyldig i alle modulane.

    Private VarName As TYPENAME

Variabelen er berre gyldig innføre denne modulen.

    Dim VarName 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 i variablar etter køyring av ein Sub, Function eller Property

      Static VarName As TYPENAME

Variabelen held på verdien til neste gong ein Function, Sub eller Property vert brukt. Deklarasjonen må vera inne i ein Sub, Function eller Property .

## Bestemmer kva type returverdien skal vera for ein Function eller Property

På same måten som med variablar, kan du definera returverdien for funksjonen ved å ta med eit typedeklarasjonsteikn etter funksjonsnamnet eller typen indikert med As og deretter den tilsvarande datatypen på slutten av parameterlista, for eksempel:

      Function WordCount(WordText As String) As Integer

Liknande emne

CompatibilityMode()-funksjonen

Option Explicit-uttrykket

Valfritt nøkkelord

Property-uttrykk

Statisk uttrykk