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