Spis treści

# Korzystanie z procedur, funkcji i właściwości

Poniżej opisano podstawowe użycie procedur, funkcji i właściwości w LibreOffice Basic.

Kiedy tworzysz nowy moduł, LibreOffice Basic automatycznie wstawia Sub o nazwie "Main". Ta nazwa domyślna nie ma nic wspólnego z kolejnością ani punktem początkowym projektu LibreOffice Basic. Możesz też bezpiecznie zmienić nazwę tej procedury Sub.

Nazwy zmiennych publicznych, podprogramów, funkcji i właściwości obłożone są pewnymi ograniczeniami. Nie wolno używać tej samej nazwy co jeden z modułów tej samej biblioteki.

Procedury (Sub), funkcje (Function) i właściwości (Property) pomagają utrzymać uporządkowany przegląd, dzieląc program na logiczne części.

Kolejną zaletą korzystania z procedur, funkcji i właściwości jest możliwość wykorzystywania w innym projekcie napisanego kodu programu zawierającego zadania składowe.

## Przekazywanie zmiennych do procedur, funkcji lub właściwości

Zmienne mogą być przekazywane zarówno do procedur, funkcji, jak i właściwości. Sub Function lub Property musi zostać zadeklarowana, aby oczekiwać parametrów:

      Sub SubName(Parameter1 As TYPENAME, Parameter2 As TYPENAME,...)
          ' miejsce na niestandardowy kod
      End Sub

Procedura SUB jest wywoływana z wykorzystaniem następującej składni:

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

Parametry przekazane do Sub muszą być zgodne z parametrami podanymi w deklaracji Sub.

Ten sam proces dotyczy Function. Ponadto funkcje zawsze zwracają wynik funkcji. Wynik funkcji jest definiowany przez przypisanie zwracanej wartości do nazwy funkcji:

      Function FunctionName(Parameter1 As TYPENAME, Parameter2 As TYPENAME,...) As TYPENAME
          ' miejsce na niestandardowy kod
          FunctionName=Result
      End Function

Funkcja Function jest wywoływana z wykorzystaniem następującej składni:

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

Właściwości łączą składnię procedur i funkcji. Property zwykle wymaga do jednego parametru.

      Private _IsApproved As TYPENAME
      Property Get IsApproved As TYPENAME
          ' miejsce na niestandardowy kod
          IsApproved = some_computation
      End Property
      Property Let IsApproved(value As TYPENAME)
          ' miejsce na niestandardowy kod
          _IsApproved = computed_value
      End Property

Właściwość Property jest wywoływana z wykorzystaniem następującej składni:

      var = IsApproved
      IsApproved = some_value

Możesz także użyć pełnej nazwy do wywołania procedury, funkcji lub właściwości:
[Call] Library.Module.Macro(), gdzie Call jest opcjonalne.
Na przykład, aby wywołać makro Autotext z biblioteki Gimmicks, użyj następującego polecenia:
Gimmicks.AutoText.Main()

## Przekazywanie zmiennych przez wartość lub odwołanie

Parametry mogą być przekazywane do procedury, funkcji lub właściwości zarówno przez odwołanie jak i przez wartość. Jeśli nie określono inaczej, parametr jest zawsze przekazywany przez odwołanie. Oznacza to, że Sub, Function lub Property otrzymuje parametr i może czytać oraz modyfikować jego wartość.

Jeśli chcesz przekazać parametr przez wartość, wstaw słowo kluczowe ByVal przed parametrem, kiedy wywołujesz Sub, Function lub Property, na przykład:

      Function ReadOnlyParms(ByVal p2, ByVal p2)
          ' miejsce na niestandardowy kod
      End Function
      result = ReadOnlyParms(parm1, parm2)

W tym przypadku oryginalna zawartość parametru nie zostanie zmodyfikowana przez Function, ponieważ otrzymuje ona tylko wartość, a nie sam parametr.

## Definiowanie parametrów opcjonalnych

Funkcje, procedury lub właściwości można zdefiniować za pomocą opcjonalnych parametrów, na przykład:

      Sub Rounding(number, Optional decimals, Optional format)
          ' miejsce na niestandardowy kod
      End Sub

## Argumenty pozycyjne lub słowa kluczowe

Kiedy wywołujesz funkcję lub podprogram, możesz przekazać argumenty poprzez pozycję lub nazwę. Przekazywanie przez pozycję oznacza po prostu wypisanie argumentów w kolejności, w jakiej parametry są zdefiniowane w funkcji lub podprogramie. Przekazywanie według nazwy wymaga poprzedzenia argumentu nazwą odpowiedniego parametru, po której następuje dwukropek i znak równości (:=). Argumenty słów kluczowych mogą pojawiać się w dowolnej kolejności. Przykłady można znaleźć w opisie funkcji Basic Replace().

Gdy trzeba przekazać mniej parametrów, użyj argumentów słów kluczowych. Przekazywanie wartości dla mniejszej liczby parametrów według pozycji wymaga podania wartości dla wszystkich parametrów przed nimi, opcjonalnych lub nie. Zapewnia to, że wartości znajdują się we właściwych pozycjach. Jeśli przekazujesz parametry według nazwy – używając argumentów słów kluczowych – możesz pominąć wszystkie inne argumenty pośrednie.

## Zakres zmiennych

Zmienna zdefiniowana w ramach Sub, a Function lub Property zachowuje ważność tylko do końca procedury. Jest to tak zwana zmienna „lokalna”. W wielu przypadkach potrzebujesz, aby zmienna była poprawna we wszystkich procedurach, we wszystkich modułach we wszystkich bibliotekach lub po wychodzeniu Sub, Function lub Property.

### Deklarowanie zmiennych poza Sub, Function lub Property

    Global VarName As TYPENAME

Zmienna jest ważna tak długo, jak długo trwa sesja LibreOffice.

    Public VarName As TYPENAME

Zmienna jest dostępna we wszystkich modułach.

    Private VarName As TYPENAME

Zmienna jest dostępna tylko w tym module.

    Dim VarName As TYPENAME

Zmienna jest dostępna tylko w tym module.

### Przykład dla zmiennych prywatnych

Wymuś, aby zmienne prywatne były prywatne we wszystkich modułach, ustawiając CompatibilityMode(True).

      ' ***** Module1 *****
      Private myText As String
      Sub initMyText
          myText = "Witaj"
          Print "W module 1 : ", myText
      End Sub

      ' ***** Module2 *****
      'Option Explicit
      Sub demoBug
          CompatibilityMode( True )
          initMyText
          ' Teraz zwraca pusty ciąg
          ' (lub jeśli Option Explicit zgłasza błąd)
          Print "Teraz w module 2 : ", myText
      End Sub

### Zapisywanie zawartości zmiennej po wyjściu z Sub, Function lub Property

      Static VarName As TYPENAME

Zmienna zachowuje swoją wartość do następnego wprowadzenia Function, Sub lub Property. Deklaracja musi istnieć wewnątrz elementu Sub, Function lub Property.

## Określanie typu wartości zwracanej przez Function lub Property

Podobnie jak w przypadku zmiennych, dołącz znak deklaracji typu po nazwie funkcji lub typ wskazywany przez As i odpowiedni typ danych na końcu listy parametrów, aby zdefiniować typ zwracanej funkcji lub właściwości wartość. Na przykład:

      Function WordCount(WordText As String) As Integer

Tematy pokrewne

Funkcja CompatibilityMode()

Instrukcja Option Explicit

Opcjonalne słowo kluczowe

Instrukcja Property

Instrukcja Static