Spis treści
Indeks 🔎︎

# Korzystanie z procedur i funkcji

Poniżej opisano podstawowe zasady korzystania z procedur i funkcji w LibreOffice Basic.

Podczas tworzenia nowego modułu LibreOffice Basic automatycznie wstawia procedurę SUB o nazwie "Main". Ta domyślna nazwa nie ma związku z kolejnością lub punktem startowym projektu LibreOffice Basic. Istnieje także możliwość bezpiecznej zmiany tej procedury.

Nazwy zmiennych publicznych obłożone są pewnymi restrykcjami. Nie możesz użyć takiej samej nazwy jak nazwa jednego z modułów w tej samej bibliotece.

Procedury (SUB) i funkcje (FUNCTION) pomagają zachować strukturalny układ programu poprzez podzielenie go na logiczne fragmenty.

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

## Przekazywanie zmiennych do procedur (SUB) i funkcji (FUNCTION)

Zmienne mogą być przekazywane zarówno do procedur, jak i funkcji. Instrukcje SUB i FUNCTION należy deklarować wraz z oczekiwanymi parametrami:

    Sub SubName(Parameter1 As Type, Parameter2 As Type,...)
    Kod programu
    End Sub

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

    SubName(Value1, Value2,...)

Parametry przekazane do procedury SUB muszą odpowiadać parametrom określonym podczas jej deklaracji.

Powyższe zasady obowiązują także w przypadku funkcji (FUNCTION). Dodatkowo funkcje zawsze zwracają wynik funkcji. Wynik funkcji jest definiowany przez przypisanie wartości zwracanej do nazwy funkcji:

    Function FunctionName(Parameter1 As Type, Parameter2 As Type,...) As Type
    Kod programu
    NazwaFunkcji=Wynik
    End Function

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

    Zmienna=nazwa_funkcji(parametr1, parametr2,...)

Procedurę lub funkcję można także wywoływać z wykorzystaniem w pełni kwalifikowanej nazwy:
Library.Module.Macro()
. Na przykład w celu wywołania makra AutoTekst umieszczonego w bibliotece Dodatki należy użyć następującego polecenia:
Gimmicks.AutoText.Main()

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

Parametry mogą być przekazywane do procedury SUB lub funkcji FUNCTION zarówno przez odwołanie, jak i przez wartość. O ile nie zostanie to inaczej określone, parametr jest zawsze przekazywany przez odwołanie. Procedura SUB lub funkcja FUNCTION pobiera zatem parametr i może odczytać oraz zmodyfikować jego wartość.

W celu przekazania parametru przez wartość podczas wywoływania procedury SUB lub funkcji FUNCTION należy poprzedzić go słowem kluczowym ByVal:

    Wynik = funkcja(ByVal parametr)

W tym przypadku pierwotna wartość parametru nie zostanie zmodyfikowana przez funkcję FUNCTION, ponieważ nie pobiera ona parametru, a wyłącznie jego wartość.

## Zakres zmiennych

Zmienna zdefiniowana w obrębie procedury SUB lub funkcji FUNCTION jest dostępna wyłącznie do momentu opuszczenia procedury. Taka zmienna jest nazywana zmienną lokalną. W wielu przypadkach wymagana jest dostępność zmiennej we wszystkich procedurach, w każdym module lub we wszystkich bibliotekach lub też po opuszczeniu procedury SUB lub funkcji FUNCTION.

### Deklarowanie zmiennych poza procedurą SUB lub funkcją FUNCTION

    Global nazwa_zmiennej As nazwa_typu

Zmienna jest dostępna podczas całej sesji LibreOffice.

    Public nazwa_zmiennej As nazwa_typu

Zmienna jest dostępna we wszystkich modułach.

    Private nazwa_zmiennej As nazwa_typu

Zmienna jest dostępna tylko w tym module.

    Dim nazwa_zmiennej As nazwa_typu

Zmienna jest dostępna tylko w tym module.

### Przykład dla zmiennych prywatnych

Wymuś zmienne prywatne, aby były prywatne w różnych modułach przez ustawienie CompatibilityMode(prawda).

    ' ***** 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
        ' (or raises error for Option Explicit)
        Print "Teraz w module 2 : ", myText
    End Sub

### Zachowanie wartości zmiennych po opuszczeniu procedury SUB lub funkcji FUNCTION

    Static nazwa_zmiennej As nazwa_typu

Zmienna zachowuje wartość aż do następnego uruchomienia funkcji FUNCTION lub procedury SUB. Deklaracja musi istnieć wewnątrz procedury SUB lub funkcji FUNCTION.

## Określenie typu zwracanej wartości funkcji

Podobnie jak w przypadku zmiennych, w celu zdefiniowania typu zwracanej wartości funkcji po jej nazwie należy podać znak deklaracji typu lub też na końcu listy parametrów dodać "As" i odpowiednie słowo kluczowe, na przykład:

    Function WordCount(WordText As String) As Integer