Sumário

# Utilizar procedimentos, funções e propriedades

A seguir é descrita a utilização básica de procedimentos, funções e propriedades no Basic LibreOffice.

Quando um novo módulo é criado, o Basic LibreOffice automaticamente insere uma Sub chamada "Main". Esse nome padrão não está diretamente ligado com a ordem ou ponto de início de um projeto Basic LibreOffice. É possível renomear seguramente esta rotina Sub.

Algumas restrições se aplicam para os nomes de suas variáveis públicas, subrotinas, funções e propriedades. É necessário evitar usar os mesmos nomes dos módulos da mesma biblioteca.

Os procedimentos (Sub rotinas), as funções (Function) e propriedades (Property) ajudam a manter uma visão estruturada ao separar um programa em partes lógicas. Estas partes podem facilmente serem reutilizadas para executar tarefas similares em ouros projetos.

## Passar variáveis para procedimentos, funções ou propriedades

Variáveis podem ser passadas para procedimentos, funções ou propriedades. A Sub Function ou Property deve ser declarada para esperar parâmetros:

      Sub SubName(Parameter1 As TYPENAME, Parameter2 As TYPENAME,...)
          ' o código vai aqui
      End Sub

A Sub é chamada usando a seguinte sintaxe:

      [Call] SubName( [Parameter1:=]Value1, [Parameter2:=]Value2, ...)

Os parâmetros passados para uma Sub deve ser compatível com aqueles especificados na declaração da Sub .

O mesmo se aplica à uma Function. Adicionalmente, funções sempre retornam um resultado. Este resultado é definido ao atribuir o valor de retorno ao nome da função:

      Function FunctionName(Parameter1 As TYPENAME, Parameter2 As TYPENAME,...) As TYPENAME
          ' seu código vai aqui
          FunctionName=Result
      End Function

A Function é chamada usando a seguinte sintaxe:

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

Propriedades combinam a sintaxe de procedimentos e funções. Uma Propriedade normalmente requer pelo menos um parâmetro.

      Private _IsApproved As TYPENAME
      Property Get IsApproved As TYPENAME
          ' seu código vai aqui
          IsApproved = some_computation
      End Property
      Property Let IsApproved(value As TYPENAME)
          ' seu código vai aqui
          _IsApproved = computed_value
      End Property

A Property é chamada usando a seguinte sintaxe:

      var = IsApproved
      IsApproved = some_value

Também é possível utilizar o nome completamente qualificado para chamar um procedimento, função ou propriedade:
[Call] Library.Module.Macro(), onde Call é opcional.
Por exemplo, para chamar a macro Autotexto da biblioteca Gimmicks, utilize o seguinte comando:
Gimmicks.AutoText.Main()

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

Parâmetros podem ser passados para um procedimento, uma função ou uma propriedade tanto por referência como por valor. A não ser que especificado de outra forma, um parâmetro é sempre passado por referência. Isso significa que uma Sub, uma Function ou uma Property recebe o parâmetro e pode ler e modificar seu valor.

Se desejar passar um parâmetro por valor, insira a palavra-chave ByVal na frente do parâmetro quando chamar uma Sub, uma Function ou uma Property, por exemplo:

      Function ReadOnlyParms(ByVal p2, ByVal p2)
          ' seu código vai aqui
      End Function
      result = ReadOnlyParms(parm1, parm2)

Nesse caso, o conteúdo original do parâmetro não será modificado pela Function uma vez que recebe o valor e não o parâmetro em si.

## Definir parâmetros opcionais

Funções, procedimentos ou propriedades podem ser definidas com parâmetros opcionais, por exemplo:

      Sub Rounding(number, Optional decimals, Optional format)
          ' seu código vai aqui
      End Sub

## Argumentos por posição ou por palavra-chave

Ao chamar uma função ou sub-rotina, você pode passar seus argumentos por posição ou por nome. Passar por posição significa apenas listar os argumentos na ordem em que os parâmetros são definidos na função ou sub-rotina. A passagem por nome requer que você prefixe o argumento com o nome do parâmetro correspondente seguido por dois pontos e um sinal de igual (: = ). Os argumentos de palavra-chave podem aparecer em qualquer ordem. Consulte a função do Basic Replace() para esses exemplos.

Quando precisar passar menos parâmetros, use argumentos com palavras-chave. Passar valores com menos parâmetros por posição requer que forneça valores para todos os parâmetros anteriores, opcionais ou não. Isso garante que os valores estejam nas posições corretas. Se passar os parâmetros por nome - usando argumentos de palavra-chave - você pode omitir todos os outros argumentos intermediários.

## Escopo das variáveis

Uma variável definida dentro de Sub, Function ou Property, só é válida até que o procedimento encerre. É conhecido como variável "local". Em muitos casos você precisa de uma variável que seja válida em todos os procedimentos, em todos os módulos de todas as bibliotecas, ou depois que uma Sub, Function ou Property é encerrada.

### Declarar uma variável fora de Sub, Function ou Property

    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 manter as variáveis privadas para todos os módulos definindo 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 aciona um erro para Option Explicit)
          Print "Agora no módulo2 : ", myText
      End Sub

### Salvar conteúdo de variável depois de sair de uma Sub , uma Function ou um a Property

      Static VarName As TYPENAME

A variável retem seu valor até a próxima vez que uma Function, Sub ou Property é inserida. A declaração precisa existir dentro de uma Sub, uma Function ou uma Property.

## Especificar o tipo de valor de retorno de uma Function ou uma Property

Tal como variáveis, inclua um caractere de declaração de tipo depois do nome da função, ou digite o tipo indicado por As seguido do tipo de dado correspondente no fim da lista de parâmetros para definir o tipo da função ou do valor de retorno da propriedade, por exemplo:

      Function WordCount(WordText As String) As Integer

Tópicos relacionados

Função CompatibilityMode()

Instrução Option Explicit

Palavra chave Optional

Instrução Property

Instrução Static