Módulo
Conteúdo
Índice 🔎︎

# Utilizar procedimentos e funções

Esta parte descreve o uso básico de procedures e funções no LibreOffice Basic.

Quando você cria um novo módulo, o LibreOffice Basic automaticamente insere uma SUB chamada "Main". Esse nome padrão não tem nada a ver com a ordem nem com o ponto de início de um projeto do LibreOffice Basic. Você também pode renomear essa SUB de forma segura.

Algumas restrições se aplicam para os nomes de suas variáveis públicas, subs e functions. Você não deve utilizar o mesmo nome que os de módulos da mesma biblioteca.

Os procedimentos (SUBS) e as funções (FUNCTIONS) ajudam você a manter uma visão geral estruturada, separando um programa em partes lógicas.

Um benefício da utilização de procedures e funções é que, uma vez desenvolvido um código de programa contendo componentes de tarefas, você pode usar este código em outro projeto.

## Passar variáveis para procedimentos (SUB) e funções (FUNCTION)

É possível passar variáveis tanto para procedimentos como para funções. É necessário declarar uma SUB ou a FUNCTION para esperar os parâmetros:

    Sub SubName(Parameter1 As Type, Parameter2 As Type,...)

    Código do programa

    End Sub

A SUB é chamada usando-se a seguinte sintaxe:

    SubName(Value1, Value2,...)

Os parâmetros passados para uma SUB devem corresponder aos especificados na declaração da SUB.

O mesmo processo se aplica às FUNCTIONS. Além disso, as funções sempre retornam um resultado. O resultado é definido atribuindo-se o valor de retorno ao nome da função:

    Function FunctionName(Parameter1 As Type, Parameter2 As Type,...) As Type

    Código do programa

    FunctionName=Result

    End Function

Para chamar uma FUNCTION, use seguinte sintaxe:

    Variable=FunctionName(Parameter1, Parameter2,...)

Você também pode usar o nome qualificado para chamar um procedimento ou função:
Library.Module.Macro()
Por exemplo, para executar a macro Autotext da biblioteca Gimmicks, use o comando a seguir:
Gimmicks.AutoText.Main()

## Passar variáveis por valor ou referência

Os parâmetros podem ser passados para uma SUB ou FUNCTION por referência ou por valor. A menos que especificado de outra forma, o parâmetro é sempre passado por referência. Isso significa que uma SUB ou FUNCTION obtém o parâmetro e pode ler e modificar seu valor.

Para passar um parâmetro por valor, quando você chamar uma SUB ou FUNCTION, insira a palavra-chave "ByVal" na frente do parâmetro, por exemplo:

    Result = Function(ByVal Parameter)

Neste caso, o conteúdo original do parâmetro não será modificado pela FUNCTION, já que ele obtém apenas o valor, e não o parâmetro propriamente dito.

## Escopo das variáveis

Uma variável definida dentro de uma SUB ou FUNCTION só permanecerá válida até que o procedimento seja finalizado. Ela é conhecida como uma variável "local". Em muitos casos, você precisará de uma variável que seja válida em todos os procedimentos, em cada módulo de todas as bibliotecas ou depois que a SUB ou FUNCTION for encerrada.

### Declarar variáveis fora de uma SUB ou FUNCTION

    Global VarName As TYPENAME

A variável é válida enquanto durar a sessão do LibreOffice.

    Public VarName As TYPENAME

A variável é válida em todos os módulos.

    Private VarName As TYPENAME

A variável é válida somente neste módulo.

    Dim VarName As TYPENAME

A variável é válida somente neste módulo.

### Exemplo de variáveis private

Force as variáveis de natureza privada a se manterem privadas entre os módulos ao definir CompatibilityMode(true).

    ' ***** Module1 *****

    Private myText As String

    Sub initMyText

        myText = "Olá"

        Print "no módulo 1 : ", myText

    End Sub

    ' ***** Module2 *****

    'Option Explicit

    Sub demoBug

        CompatibilityMode( true )

        initMyText

        ' Retorna agora uma string vazia

        ' (ou sinaliza um erro para Option Explicit)

        Print "Agora no módulo2 : ", myText

    End Sub

### Salvar o conteúdo de uma variável após a finalização de uma SUB ou FUNCTION

    Static VarName As TYPENAME

A variável retém o seu valor até a próxima vez que a Function ou Sub for chamada. A declaração deve existir dentro de uma Sub ou uma Function.

## Especificar o tipo do valor de retorno de uma FUNCTION

Da mesma forma como você faz com as variáveis, inclua um caractere de declaração de tipo após o nome da função, ou o tipo indicado por "As" e a palavra-chave correspondente no final da lista de parâmetros para definir o tipo do valor de retorno da função, por exemplo:

    Function WordCount(WordText As String) As Integer