Obsah

# Použití procedur, funkcí a vlastností

Následující část popisuje základní použití procedur, funkcí a vlastností v jazyce 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 stavem projektu v LibreOffice Basic. Tuto proceduru je možné bez obav přejmenovat.

Názvů veřejných proměnných, procedur, funkcí a vlastností se týkají jistá omezení. Nelze použít stejný název, jaký má některý modul téže knihovny.

Procedury (Sub), funkce (Function) a vlastnosti (Property) pomáhají udržovat strukturu programu rozdělenou na logické celky. Tyto celky lze snadno znovu použít k provádění podobných úkolů v jiných projektech.

## Předávání proměnných procedurám, funkcím nebo vlastnostem

Proměnné lze předávat procedurám, funkcím i vlastnostem. Příkazy Sub, Function nebo Property musí být deklarovány tak, aby očekávaly parametry:

      Sub SubName(Parameter1 As TYPENAME, Parameter2 As TYPENAME,...)
          ' místo pro vlastní kód
      End Sub

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

      [Call] SubName( [Parameter1:=]Value1, [Parameter2:=]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. Ten je definován tak, že se k názvu funkce přiřadí hodnota, která se má vrátit:

      Function FunctionName(Parameter1 As TYPENAME, Parameter2 As TYPENAME,...) As TYPENAME
          ' místo pro vlastní kód
          FunctionName=Result
      End Function

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

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

Vlastnosti spojují syntaxi procedur a funkcí. Property obvykle vyžaduje jeden parametr.

      Private _IsApproved As TYPENAME
      Property Get IsApproved As TYPENAME
          ' místo pro vlastní kód
          IsApproved = some_computation
      End Property
      Property Let IsApproved(value As TYPENAME)
          ' místo pro vlastní kód
          _IsApproved = computed_value
      End Property

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

      var = IsApproved
      IsApproved = some_value

Proceduru, funkci nebo vlastnost je také možné volat plně kvalifikovaným názvem.
[Volání] Knihovna.Modul.Makro(), kde Volání je nepovinné.
Například makro Autotext z knihovny Gimmicks zavoláte jako:
Gimmicks.AutoText.Main()

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

Parametry lze proceduře, funkci nebo vlastnosti předat buď odkazem, nebo hodnotou. Pokud není určeno jinak, předává se parametr vždy odkazem. To znamená, že Sub, Function a Property mohou obdrženou hodnotu číst i měnit.

Pokud chcete předat parametr hodnotou, vložte před parametr při volání Sub, Function nebo Property klíčové slovo ByVal Například:

      Function ReadOnlyParms(ByVal p2, ByVal p2)
          ' místo pro vlastní kód
      End Function
      result = ReadOnlyParms(parm1, parm2)

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ý.

## Definování nepovinných parametrů

Pro funkce, procedury nebo vlastnosti je možné definovat nepovinné parametry. Například:

      Sub Rounding(number, Optional decimals, Optional format)
          ' místo pro vlastní kód
      End Sub

## Argumenty zadané pozicí nebo klíčovým slovem

Když voláte funkci nebo podprogram, můžete jejich argumenty předat pomocí pozice či názvu. Předávání pomocí pozice znamená prostý výpis argumentů v pořadí, ve kterém jsou ve funkci nebo podprogramu definovány. Předávání pomocí názvu vyžaduje, aby byl před argumentem uveden název odpovídajícího parametru následovaný dvojtečkou a znaménkem je rovno (:=). Argumenty s klíčovým slovem se mohou objevovat v jakémkoliv pořadí. Příklady naleznete u popisu funkce Basicu Replace().

Potřebujete-li předat méně parametrů, použijte klíčová slova. Předávání hodnot pro méně parametrů pomocí pozic by znamenalo, že byste zadávali hodnoty pro všechny parametry před požadovaným bez ohledu na to, zda jsou povinné, nebo nikoli. Díky tomu by se hodnoty nacházely na správných pozicích. Pokud předáváte parametry pomocí názvu - za použití argumentů s klíčovými slovy - můžete všechny ostatní argumenty vynechat.

## Viditelnost proměnných

Proměnná definovaná v rámci Sub, Function nebo Property zůstává platná jen do ukončení procedury. Jedná se o takzvanou „lokální“ proměnnou. V mnoha případech potřebujete, aby proměnná platila ve všech procedurách, ve všech modulech všech knihoven nebo po ukončení Sub, Function či Property.

### Deklarace proměnných mimo Sub, Function nebo Property

    Global VarName As TYPENAME

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

    Public VarName As TYPENAME

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

    Private VarName As TYPENAME

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

    Dim VarName As TYPENAME

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, Function nebo Property

      Static VarName As TYPENAME

Proměnná si zachová hodnotu až do příštího spuštění Function, Sub nebo Property. Deklaraci je nutné uvést v rámci příkazu Sub,Function či Property.

## Určení typu návratové hodnoty pro Function nebo Property

Chcete-li definovat typ návratové hodnoty funkce nebo vlastnosti, přidejte podobně jako u proměnné za název funkce znak typové deklarace nebo na konec seznamu parametrů typ označený As a odpovídajícím datovým typem. Například:

      Function WordCount(WordText As String) As Integer

Související témata

Funkce CompatibilityMode()

Příkaz Option Explicit

Klíčové slovo Optional

Příkaz Property

Příkaz Static