Utilizar procedimentos, funções e propriedades

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

note

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.


note

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.


Procedimentos (Subrotinas) funções (Function) e propriedades (Property) ajudam a manter uma visão geral estruturada pela separação de um programa em partes lógicas.

Um benefício de procedimentos, funções e propriedades é que, uma vez que se tenha desenvolvido um código de programa contendo componentes de tarefas, é possível utilizar esse código em outro projeto.

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 de função. O resultado de uma função é definido ao designar o valor de retorno para o 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
tip

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

♥ Doe para nosso projeto! ♥