Obsah
Index 🔎︎

# Použití procedur a funkcí

Následující část popisuje základní použití procedur a funkcí v LibreOffice Basic.

Když vytvoříte nový modul, LibreOffice Basic automaticky vloží SUB nazvaný "Main". Tento výchozí název nemá nic společného s pořadím nebo počátečním bodem projektu v LibreOffice Basic. Tuto proceduru je možné bez obav přejmenovat.

Jistá omezení se týkají jmen vašich veřejných proměnných, procedur a funkcí. Nesmíte použít stejné jméno, jako některý modul stejné knihovny.

Procedury (SUB) a funkce (FUNCTION) vám pomáhají udržovat strukturu programu rozdělením na logické celky.

Jednou z výhod procedur a funkcí je to, že již jednou napsané části plnící určité úkoly, je možné využít i v jiných projektech.

## Předávání proměnných procedurám (SUB) a funkcím (FUNCTION)

Proměnné lze předávat procedurám i funkcím. SUB nebo FUNCTION musí být deklarováno tak, aby očekávalo parametry:

    Sub SubName(Parameter1 As Type, Parameter2 As Type,...)
    Programový kód
    End Sub

SUB zavoláte pomocí následující syntaxe:

    SubName(Value1, Value2,...)

Parametry předané SUB musí odpovídat těm, které jsou určeny v deklaraci SUB.

Stejný postup platí i pro FUNCTION. Navíc funkce vždy vrací výsledek. Výsledek funkce se určí tak, že se názvu funkce přiřadí výsledná hodnota:

    Function FunctionName(Parameter1 As Type, Parameter2 As Type,...) As Type
    Programový kód
    NazevFunkce=Vysledek
    End Function

FUNCTION se volá pomocí následující syntaxe:

    Promenna=NazevFunkce(Parametr1, Parametr2,...)

Proceduru nebo funkci je také možné volat plně kvalifikovaným názvem.
Knihovna.Modul.Makro()
Například chcete zavolat makro Autotext z knihovny Gimmicks:
Gimmicks.AutoText.Main()

## Předávání proměnných hodnotou nebo odkazem

Parametry lze SUB nebo FUNCTION předat buď odkazem nebo hodnotou. Pokud není určeno jinak, předává se parametr vždy odkazem. To znamená, že SUB nebo FUNCTION může číst a upravovat hodnotu parametru.

Pokud chcete předat parametr hodnotou, vložte před parametr při volání SUB nebo FUNCTION klíčové slovo "ByVal". Například:

    Vysledek = Funkce(ByVal Parametr)

V tomto případě nemůže FUNCTION změnit původní obsah parametru, protože získá jen jeho aktuální hodnotu a ne parametr samotný.

## Viditelnost proměnných

Proměnná definovaná v rámci SUB nebo FUNCTION zůstává platná jen do ukončení procedury či funkce. To je takzvaná "lokální" proměnná. V mnoha případech potřebujete, aby proměnná platila ve všech procedurách, v každém modulu všech knihoven, nebo po ukončení SUB či FUNCTION.

### Deklarace proměnných mimo SUB nebo FUNCTION

    Global Promenna As TYP

Proměnná je platná, dokud neukončíte LibreOffice.

    Public Promenna As TYP

Proměnná je platná ve všech modulech.

    Private Promenna As TYP

Proměnná je platná pouze v tomto modulu.

    Dim Promenna As TYP

Proměnná je platná pouze v tomto modulu.

### Příklad pro soukromé proměnné

Soukromé proměnné nastavíte jako soukromé v rámci modulů pomocí CompatibilityMode(true).

    ' ***** Module1 *****
    Private myText As String
    Sub initMyText
        myText = "Ahoj"
        Print "V modulu 1 : ", myText
    End Sub

    ' ***** Module2 *****
    'Option Explicit
    Sub demoBug
        CompatibilityMode( true )
        initMyText
        ' Vrátí prázdný řetězec
        ' (nebo v případě Option Explicit vyvolá chybu)
        Print "Teď v modulu 2 : ", myText
    End Sub

### Uložení obsahu proměnné po ukončení SUB nebo FUNCTION

    Static Promenna As TYP

Proměnná si zachová svou hodnotu, až do příštího spuštění FUNCTION nebo SUB. Uvnitř SUB nebo FUNCTION musí být deklarována.

## Určení typu návratové hodnoty FUNCTION

Podobně jako u proměnné přidejte za název funkce znak typové deklarace, nebo na konec seznamu parametrů typ určený "As" a odpovídajícím klíčovým slovem. Např.:

    Function WordCount(WordText As String) As Integer