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