Verwendung von Prozeduren, Funktionen oder Eigenschaften

Inhalte

# Prozeduren, Funktionen und Eigenschaften verwenden

Im Folgenden ist die grundsätzliche Verwendung von Prozeduren, Funktionen und Eigenschaften in LibreOffice Basic beschrieben.

Wird ein neues Modul erstellt, implementiert LibreOffice Basic automatisch ein Sub namens "Main". Dieser voreingestellte Name beeinflusst nicht die Reihenfolge oder den Startpunkt von einem LibreOffice Basic Projekt. Die Routine Sub kann problemlos umbenannt werden.

Für die Namen der öffentlichen Variablen, Unterprogramme, Funktionen und Eigenschaften gelten einige Einschränkungen. Sie dürfen nicht denselben Namen wie eines der Module der gleichen Bibliothek verwenden.

Prozeduren (Subroutines), Funktionen (Function) und Eigenschaften (Property) helfen, einen strukturierten Überblick zu bewahren, indem sie ein Programm in logische Teile zerlegen. Diese Teile können leicht wiederverwendet werden, um ähnliche Aufgaben in anderen Projekten auszuführen.

## Übergabe von Variablen an Prozeduren, Funktionen oder Eigenschaften

Variablen können an Prozeduren, Funktionen oder Eigenschaften übergeben werden. Die Funktion oder Eigenschaft Sub muss deklariert werden, um Parameter zu erwarten:

      Sub SubName(Parameter1 As TYPENAME, Parameter2 As TYPENAME,...)
          ' Ihr Code gehört hier hin
      End Sub

Das Sub wird mit der folgenden Syntax aufgerufen:

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

Die an Sub übertragenen Parameter müssen zu denen passen, die in der Deklaration von Sub angegeben sind.

Derselbe Vorgang gilt für eine Funktion. Darüber hinaus geben Funktionen immer ein Ergebnis zurück. Dieses Ergebnis wird definiert, indem dem Funktionsnamen der zurückzugebende Wert zugewiesen wird:

      Function FunctionName(Parameter1 As TYPENAME, Parameter2 As TYPENAME,...) As TYPENAME
          ' Ihr Code gehört hier hin
          FunctionName=Result
      End Function

Die Funktion wird mit der folgenden Syntax aufgerufen:

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

Eigenschaften verbinden die Syntax von Prozeduren und Funktionen. Eine Eigenschaft benötigt für gewöhnlich bis zu einem Parameter.

      Private _IsApproved As TYPENAME
      Property Get IsApproved As TYPENAME
          ' Ihr Code gehört hier hin
          IsApproved = some_computation
      End Property
      Property Let IsApproved(value As TYPENAME)
          ' Ihr Code gehört hier hin
          _IsApproved = computed_value
      End Property

Die Eigenschaft wird durch die folgende Syntax aufgerufen:

      var = IsApproved
      IsApproved = some_value

Auch vollqualifizierte Namen können verwendet werden, um Prozeduren, Funktionen oder Eigenschaften aufzurufen:
[Call] Library.Module.Macro(), wobei Call optional ist.
Um beispielsweise das Makro "Autotext" von der Bibliothek "Gimmicks" aufzurufen, wird folgender Befehl verwenden:
Gimmicks.AutoText.Main()

## Übergeben von Variablen als Wert oder Referenz

Parameter können entweder per Referenz oder per Wert an eine Prozedur, eine Funktion oder eine Eigenschaft übergeben werden. Sofern nicht anders angegeben, wird ein Parameter immer als Referenz übergeben. Das bedeutet, dass Sub, Function oder Property den Parameter bekommt und seinen Wert lesen und ändern kann.

Um einen Parameter als Wert zu übergeben, beim Aufruf von Sub, Function oder Property das Schlüsselwort ByVal vor dem Parameter einfügen, zum Beispiel:

      Function ReadOnlyParms(ByVal p2, ByVal p2)
          ' Ihr Code gehört hier hin
      End Function
      result = ReadOnlyParms(parm1, parm2)

In diesem Fall wird der ursprüngliche Inhalt des Parameters durch Function nicht verändert, da sie nur den Wert und nicht den Parameter selbst erhält.

## Optionale Parameter festlegen

Funktionen, Prozeduren oder Eigenschaften können mit optionalen Parametern definiert werden, beispielsweise:

      Sub Rounding(number, Optional decimals, Optional format)
          ' Ihr Code gehört hier hin
      End Sub

## Positions- oder Schlüsselwort-Argumente

Wird eine Funktion oder eine Unterroutine aufgerufen, können deren Argumente nach Position oder nach Name übergeben werden. Die Übergabe nach Position bedeutet, dass nur die Argumente in der Reihenfolge aufgelistet werden, in der die Parameter in der Funktion oder Unterroutine festgelegt sind. Die Übergabe des Namens erfordert, dass dem Argument der Namen des entsprechenden Parameters vorangestellt wird, gefolgt von einem Doppelpunkt und einem Gleichheitszeichen (:=). Schlüsselwort-Argumente können in beliebiger Reihenfolge angezeigt werden. Für Beispiele sei auf die Basic-Funktion Replace() verwiesen.

Müssen weniger Parameter übergeben werden, Schlüsselwort-Argumente verwenden. Das Übergeben von Werten für weniger Parameter nach Position erfordert, dass Werte für alle Parameter vor ihnen angegeben werden, ob optional oder nicht. Dadurch wird sichergestellt, dass sich die Werte an den richtigen Positionen befinden. Werde die Parameter nach Namen übergeben – mit Schlüsselwort-Argumenten – können alle anderen Zwischenargumente weggelassen werden.

## Gültigkeitsbereich von Variablen

Eine innerhalb von Sub, Function oder Property definierte Variable bleibt nur gültig, bis die Prozedur beendet wird. Dies wird als "lokale" Variable bezeichnet. In vielen Fällen wird eine Variable benötigt, die in allen Prozeduren, in jedem Modul aller Bibliotheken oder nach Sub, Function oder Property gültig ist.

### Deklarieren von Variablen außerhalb von Sub, Function oder Property

    Global VarName As TYPENAME

Die Variable ist solange gültig, wie die LibreOffice-Sitzung andauert.

    Public VarName As TYPENAME

Die Variable hat in allen Modulen Gültigkeit.

    Private VarName As TYPENAME

Die Variable hat nur im Modul Gültigkeit.

    Dim VarName As TYPENAME

Die Variable hat nur im Modul Gültigkeit.

### Beispiele für private Variablen

Um zu erzwingen, dass private Variablen modulübergreifend privat bleiben, kann CompatibilityMode(True) gesetzt werden.

      ' ***** Module1 *****
      Private myText As String
      Sub initMyText
          meinText = "Hallo"
          Print "In Modul 1 : ", meinText
      End Sub

      ' ***** Module2 *****
      'Option Explicit
      Sub demoBug
          CompatibilityMode( True )
          initMyText
          ' Gibt jetzt einen leeren String zurück
          ' (oder löst einen Fehler für Option Explicit aus)
          Print "Jetzt in Modul 2 : ", meinText
      End Sub

### Den Inhalt einer Variablen nach dem Beenden eines Sub, einer Funktion oder einer Eigenschaft speichern

      Static VarName As TYPENAME

Die Variable behält ihren Wert bis zur nächsten Eingabe einer Function, Sub oder Property. Die Deklaration muss innerhalb von Sub, Function oder Property existieren.

## Den Typ eines Rückgabewerts einer Funktion oder einer Eigenschaft festlegen

Wie bei Variablen ein Typdeklarationszeichen nach dem Funktionsnamen oder den durch As angegebenen Typ und den entsprechenden Datentyp am Ende der Parameterliste einfügen, um den Rückgabetyp der Funktion oder Eigenschaft zu definieren Wert, zum Beispiel:

      Function WordCount(WordText As String) As Integer

Verwandte Themen

Funktion CompatibilityMode()

Anweisung Option Explicit

Optionales Schlüsselwort

Anweisung Property

Statische Anweisung

Bitte unterstützen Sie uns!