Innhold

# Bruke prosedyrer, funksjoner og egenskaper

Det følgende beskriver den grunnleggende bruken av prosedyrer, funksjoner og egenskaper i LibreOffice Basic.

Når du oppretter en ny modul, setter LibreOffice Basic automatisk inn en Sub kalt "Main". Dette standardnavnet har ingenting å gjøre med rekkefølgen eller startpunktet for et LibreOffice Basic-prosjekt. Du kan også trygt gi nytt navn til denne Subrutinen.

Noen begrensninger gjelder for navnene på dine offentlige variabler, subrutiner, funksjoner og egenskaper. Du kan ikke bruke samme navn som en av modulene i samme bibliotek.

Prosedyrer (Subrutiner) funksjoner (Funksjon) og egenskaper (Property) hjelper deg med å opprettholde en strukturert oversikt ved å dele et program i logiske deler. Disse delene kan enkelt gjenbrukes til å utføre lignende oppgaver i andre prosjekter.

## Overføring av variabler til prosedyrer, funksjoner eller egenskaper

Variabler kan overføres til både prosedyrer, funksjoner eller egenskaper. Sub Funksjonen eller Egenskap må deklareres for å forvente parametere:

      Sub SubName(Parameter1 As TYPENAME, Parameter2 As TYPENAME,...)
          ' din kode finner sted her
      End Sub

Sub anropes ved å bruke følgende syntaks:

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

Parametrene som sendes til en Sub må passe til de som er spesifisert i Sub-erklæringen.

Den samme prosessen gjelder for en Funksjon. I tillegg returnerer funksjoner alltid et resultat. Dette resultatet defineres ved å tilordne verdien for å gå tilbake til funksjonsnavnet:

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

Funksjonen kalles ved hjelp av følgende syntaks:

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

Egenskaper kombinerer syntaksen til prosedyrer og funksjoner. En Egenskap krever vanligvis opptil én parameter.

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

Egenskapen kalles ved hjelp av følgende syntaks:

      var = IsApproved
      IsApproved = some_value

Du kan også bruke det fullstendige navnet til å kalle en prosedyre, funksjon eller egenskap:
[Call] Library.Module.Macro(), der Call er valgfritt .
For å kalle opp Autotekst-makroen fra Gimmicks-biblioteket, bruk følgende kommando:
Gimmicks.AutoText.Main()

## Å overføre variabler som verdi eller referanse

Parametre kan overføres til en prosedyre, en funksjon eller en egenskap enten ved referanse eller ved verdi. Med mindre annet er spesifisert, sendes en parameter alltid ved referanse. Det betyr at en Sub, en Funksjon eller en Egenskap får parameteren og kan lese og endre verdien.

Hvis du vil sende en parameter etter verdi, sett inn nøkkelordet ByVal foran parameteren når du kaller en Sub, en Funksjon eller en Egenskap, for eksempel:

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

I dette tilfellet vil ikke det opprinnelige innholdet til parameteren bli endret av Funksjonen siden den kun får verdien og ikke selve parameteren.

## Definering av valgfrie parametre

Funksjoner, prosedyrer eller egenskaper kan defineres med valgfrie parametere, for eksempel:

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

## Posisjonelle eller søkeord-argumenter

Når du kaller en funksjon eller en subrutine, kan du sende argumentene ved posisjon eller navn. Å sende etter posisjon betyr bare å liste argumentene i den rekkefølgen parametrene er definert i funksjonen eller subrutinen. Ved å sende etter navn må du prefiksere argumentet med navnet på den tilsvarende parameteren etterfulgt av et kolon og et likhetstegn (:=). Søkeordargumenter kan vises i hvilken som helst rekkefølge. Se Basic Replace()-funksjonen for slike eksempler.

Når du trenger å sende færre parametere, bruk søkeordargumenter. Sending av verdier for færre parametere etter posisjon krever å angi verdier for alle parametere, valgfrie eller ikke. Dette sikrer at verdiene er i riktig posisjon. Hvis du sender parameterne ved navn - ved å bruke nøkkelordargumenter - kan du utelate alle andre mellomargumenter.

## Variabelområde

En variabel definert innenfor en Sub, en Funksjon eller en Egenskap, forblir bare gyldig til prosedyren avsluttes. Dette er kjent som en "lokal" variabel. I mange tilfeller trenger du en variabel for å være gyldig i alle prosedyrer, i hver modul i alle biblioteker, eller etter en Sub, en Funksjon eller en Egenskap er avsluttet.

### Erklære variabler utenfor en Sub en Funksjon eller en Egenskap

    Global VarName As TYPENAME

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

    Public VarName As TYPENAME

Variabelen er gyldig i alle modulene.

    Private VarName As TYPENAME

Variabelen er kun gyldig i denne modulen.

    Dim VarName As TYPENAME

Variabelen er kun gyldig i denne modulen.

### Eksempel på private variabler

Tvinge private variabler til å være private på tvers av moduler ved å sette CompatibilityMode(Sann).

      ' ***** 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 gir feil for Option Explicit)
          Print "Nå i modul2: ", minTekst
      End Sub

### Lagre variabelt innhold etter at du har avsluttet en Sub en Funksjon eller en Egenskap

      Static VarName As TYPENAME

Variabelen beholder sin verdi til neste gang Funksjon, Sub eller Egenskap angis. Erklæringen må finnes i en Sub, en Funksjon eller en Egenskap.

## Spesifisere returverditypen for en Funksjon eller en Egenskap

Som med variabler, inkluderer du et typedeklarasjonstegn etter funksjonsnavnet, eller typen angitt av As og den tilsvarende datatypen på slutten av parameterlisten for å definere typen av funksjonen eller egenskapens retur verdi, for eksempel:

      Function WordCount(WordText As String) As Integer

Lignende emner

CompatibilityMode()-funksjon

Alternativ Eksplisitt uttrykk

Valgfritt søkeord

Egenskapserklæring

Statisk Erklæring