Brug af procedurer, funktioner og egenskaber

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

note

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


note

Nogle restriktioner gælder navne på dine offentlige variabler, subrutiner, funktioner eller egenskaber. Du må ikke bruge det samme navn som et af modulerne i det samme bibliotek.


Prcedurer (Subrutiner), funktioner (Function) og egenskaber (Property) hjælper dig med at vedligeholde et struktureret overblik ved at opdele et program i logiske dele.

En fordel ved procedurer, funktioner og egenskaber er at, når du én gang udviklet en programkode, der indeholder opgave-komponenter, kan du bruge denne kode i et andet projekt.

Overføre variabler til procedurer, funktioner eller egenskaber

Variabler kan overføres til både procedurer, funktioner eller egenskaber. Sub, Function eller Property skal erklæres til at forvente parametre:


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

Sub kaldes med den følgende syntaks:


  SubName(Value1, 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 en Function. Derudover returnerer funktioner altid et funktionsresultat. Resultatet af en funktion er defineret ved tilknytte returværdien til funktionsnavnet:


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

Function kalde med den følgende syntaks:


  Variable=FunctionName(Parameter1, Parameter2,...)

Egenskaber kombinerer procedurers og funktioners syntaks. En egenskaber 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
tip

Du kan også bruge det fuldt kvalificerede navn til at kalde en procedure, funktion eller egenskab:
Library.Module.Macro()
For eksempelvis at kalde makroen Autotekst fra fra biblioteket Fiduser, bruger du den følgende kommando:
Fiduser.Autotekst.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 bliver det oprindelige indhold af parameteren ikke ændret af Functionen, eftersom det får værdien og ikke selve parameteren.

Definition af valgfrie parametre

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


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

Omfang på variable

En variabel, der er defineret inden for en Sub, en Function eller en Property, forbliver kun gyldig, indtil proceduren forlades. Det 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 Variabler 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

Håndhæv, at private variabler er private variabler på tværs af moduler ved at indstille 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 en Sub, en Function eller en Property er forladt


  Static VarName As TYPENAME

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

Angivelse af en Subs, en Functions eller en Propertys Returvariabel-type

Som med variabler medtager du et typeerklærings-tegn efter funktionsnavnet eller typen antydet med As og en relevant datatype i slutningen af parameterlisten for at definere funktionens type eller egenskabens returværdi, for eksempel:


  Function WordCount(WordText As String) As Integer