Indhold

# Brug af procedurer, funktioner og egenskaber

Det følgende beskriver den basale brug af proceurer, funktioner og egenskaber i LibreOffice Basic.

Når du opretter et nyt modul, indsætter LibreOffice Basic automatisk en Sub kaldet "Main". Dette standardnavn har intet at gøre med rækkefølgen i eller udgangspunktet for et LibreOfficeBasic-projekt. Du kan også trygt omdøbe denne Subrutine.

Nogle restriktioner gælder navnene på dine delte variable, subrutiner, funktioner og egenskaber. Du må ikke bruge det samme navn som på et af modulerne i det samme bibliotek.

Procedurer (Sub-rutiner), funktioner (Function) og egenskaber (Property) hjælper dig med at bevare et struktureret overblik ved at opdele et program i logiske dele. Disse dele kan let genbruges til at udføre lignende opgaver i andre projekter.

## Overførsel af variable til procedurer, funktioner eller egenskaber

Variable kan overføres til både procedurer, funktioner og egenskaber. Sub Function eller Property skal være erklæret for at forvente parametre:

      Sub SubName(Parameter1 As TYPENAME, Parameter2 As TYPENAME,...)
          ' din kode sættes her
      End Sub

Sub-rutinen kaldes med følgende syntaks:

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

Parametre, der er overført til en Sub, skal passe til dem, der er angivet i sub-erklæringen.

Den samme proces gælder for en funktion (Function). Derudover returnerer funktioner altid et resultat. Dette resultat er defineret ved at tildele returværdien til funktionsnavnet:

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

Function kaldes med den følgende syntaks:

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

Egenskaber kombinerer procedurernes syntaks og funktioner. En Property (egenskab) kræver sædvanligvis op til en parameter.

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

Property kaldes med den følgende syntaks:

      var = IsApproved
      IsApproved = some_value

Du kan også bruge det fuldt kvalificerede navn til at kalde en procedure, funktion eller egenskab:
[Call] Library.Module.Macro(), hvor Call (kald) er valgfri.
For at kalde eksempelvis makroen Autotekst fra biblioteket Gimmicks bruger du følgende kommando:
Gimmicks.AutoText.Main()

## Overførsel af variable ved værdi eller henvisning

Parametre kan overføre til en procedure, en funktion eller en egenskab enten med henvisning eller med værdi. Med mindre det er specificeret anderledes, overføres en parameter altid med henvisning. Det betyder, at en Sub, en Function eller en Property får parameteren og kan læse og ændre dens værdi.

Hvis du vil overføre en parameter med værdi, indsætter du nøgleordet ByVal foran parametren, når du kalder en Sub, en Function eller en Property, for eksempel:

      Function ReadOnlyParms(ByVal p2, ByVal p2)
          ' din kode skrives her
      End Function
      result = ReadOnlyParms(parm1, parm2)

I dette tilfælde vil parameterens oprindelige indhold ikke blive ændret af Function -en, eftersom den kun modtager værdien og ikke parameteren selv.

## Definition af valgfrie parametere

Funktioner, procedurer eller egenskaber kan defineres med valgfrie parametre, for eksempel:

      Sub Rounding(number, Optional decimals, Optional format)
          ' din kode skrives her
      End Sub

## Placerings- eller Nøgleords-argumenter

Når du kalder en funktion eller en subrutine, skal du videregive dens argumenter ved placering eller ved navn. At videregive ved placering betyder bare at opliste argumenter i den rækkefølge, de er defineret i i fuktionen eller subrutinen. At videregive ved navn kræver, at du skriver navnet på den tilsvarende parameter fulgt af et kolon og et lighedstegn (:=) foran argumentet. Nøgleords-argumenter kan forekomme i vilkårlig rækkefølge. Se eksempler på dette i Basic-funktionen Replace().

Når du har brug for at videregive færre parametere bruger du nøgleords-argumenter. At videregive værdier for færre parametere ved placerring kræver, at du angiver værdier for alle parametere foran dem, valgfrie eller ej. Dette sikrer, at værdierne er på de korrekte placeringer. Hvis du videregiver parameterne ved navn - med nøgleords-argumenter - kan du udelade alle andre mellemliggende argumenter.

## Virkefelt for variable

En variabel, der er defineret inden for en Sub, en Function eller en Property, forbliver kun gyldig, indtil proceduren forlades. Dette er kendt som en "lokal" variabel. I mange tilfælde har du brug for, at en variabel er gyldig i alle procedurer, i hvert modul i alle biblioteker eller efter at en Sub, en Function eller en Property er forladt.

### Erklæring af variable uden for en Sub, en Function eller en Property

    Global VarName As TYPENAME

Variablen er gyldig, så længe LibreOffice-sessionen varer.

    Public VarName As TYPENAME

Denne variabel er gyldig i alle moduler.

    Private VarName As TYPENAME

Denne variabel er kun gyldig i dette modul.

    Dim VarName As TYPENAME

Denne variabel er kun gyldig i dette modul.

### Eksempel for private variable

Gennemtving at private variable er private på tværs af moduler ved at sætte CompatibilityMode(True).

      ' ***** Module1 *****
      Private myText As String
      Sub initMyText
          myText = "Hej"
          Print "I modul1: ", minTekst
      End Sub

      ' ***** Module2 *****
      'Option Explicit
      Sub demoBug
          CompatibilityMode( True )
          initMyText
          ' Returnerer nu en tom streng
          ' (eller markerer fejl ved Option Explicit)
          Print "Nu i modul2: ", minTekst
      End Sub

### Lagring af variabelindhold efter at have forladt en Sub, en Function eller en Property

      Static VarName As TYPENAME

Variablen beholder sin værdi, indtil næste gang der gås ind i en Function, Sub eller Property. Erklæringen skal findes i en Sub, en Function eller en Property.

## Angivelse af en Subs, en Functions eller en Propertys Returværdi-type

Ligesom med variable kan du inkludere et typeerklærings-tegn efter funktionsnavnet eller typen angivet med As og den tilsvarende datatype i slutningen af parameterlisten, for at definere typen på funktionens eller egenskabens returværdi, for eksempel:

      Function WordCount(WordText As String) As Integer

Relaterede emner

funktionen CompatibilityMode()

Option Explicit-udtryk

Valgfrit nøgleord

Egenskabsudtryk

Statisk udtryk