Съдържание

# Използване на процедури, функции и свойства

По-долу са описани основите на работа с процедури, функции и свойства в LibreOffice Basic.

Когато създадете нов модул, LibreOffice Basic автоматично вмъква процедура (Sub) с име „Main“. Това подразбирано име не е свързано с реда или началната точка на изпълнение на проект на LibreOffice Basic. Можете безопасно да преименувате тази подпрограма от тип Sub.

За имената на публичните променливи, подпрограми, функции и свойства са в сила някои ограничения. Не трябва да използвате име, еднакво с това на модул от същата библиотека.

Процедурите (подпрограми със Sub), функциите (Function) и свойствата (Property) ви помагат да структурирате програмата, като я разделите на логически обособени части.

Едно предимство на процедурите, функциите и свойствата е, че след като веднъж сте разработили програмен код, разделен на компоненти за определени задачи, можете да ги използвате отново в друг проект.

## Предаване на променливи към процедури, функции или свойства

Можете да предавате променливи към процедури, функции и свойства. В декларацията на съответната подпрограма (Sub, Function или Property) трябва е указано, че тя очаква параметри:

      Sub SubName(Parameter1 As TYPENAME, Parameter2 As TYPENAME,...)
          ' място за вашия код
      End Sub

Процедурата (Sub) се извиква със следния синтаксис:

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

Подадените към процедура параметри трябва да съответстват на указаните в декларацията Sub.

Същото се отнася за функциите (Function). Освен това функциите винаги връщат резултат. Резултатът на функция се дефинира, като връщаната стойност се присвои на името на функцията:

      Function FunctionName(Parameter1 As TYPENAME, Parameter2 As TYPENAME,...) As TYPENAME
          ' място за вашия код
          FunctionName=Result
      End Function

Функцията (Function) се извиква със следния синтаксис:

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

Свойствата комбинират синтаксиса на процедурите и функциите. Те обикновено изискват не повече от един параметър.

      Private _IsApproved As TYPENAME
      Property Get IsApproved As TYPENAME
          ' място за вашия код
          IsApproved = some_computation
      End Property
      Property Let IsApproved(value As TYPENAME)
          ' място за вашия код
          _IsApproved = computed_value
      End Property

Свойството (Property) се извиква със следния синтаксис:

      var = IsApproved
      IsApproved = some_value

За обръщение към процедура, функция или свойство можете да използвате и напълно квалифицирано име:
[Call] Библиотека.Модул.Макрос(), където Call е незадължително.
Например, за да извикате макроса Autotext от библиотеката Gimmicks, използвайте следната команда:
Gimmicks.AutoText.Main()

## Подаване на променливи по стойност или по адрес

Към процедури, функции и свойства могат да се подават параметри по адрес или по стойност. Ако не е указано друго, параметрите винаги се предават по адрес. Това означава, че подпрограмата от тип Sub, Function или Property получава параметъра и може да чете и променя стойността му.

Ако искате да предадете параметър по стойност, вмъкнете пред него ключовата дума ByVal, когато извиквате подпрограма от тип Sub, Function или Property, например:

      Function ReadOnlyParms(ByVal p2, ByVal p2)
          ' място за вашия код
      End Function
      result = ReadOnlyParms(parm1, parm2)

В този случай оригиналното съдържание на параметъра няма да бъде променено от функцията, тъй като тя получава само стойността, но не и самия параметър.

## Дефиниране на незадължителни параметри

Функциите, процедурите и свойствата могат да бъдат дефинирани с незадължителни параметри, например:

      Sub Rounding(number, Optional decimals, Optional format)
          ' място за вашия код
      End Sub

## Позиционни аргументи и аргументи с ключова дума

Когато извиквате функция или процедура, можете да предадете аргументите ѝ по позиция или по име. Предаването по позиция представлява просто изреждане на аргументите в реда, в който са дефинирани параметрите във функцията или процедурата. Предаването по име изисква да напишете преди аргумента името на съответния параметър, последвано от двоеточие и знак за равенство (:=). Аргументите с ключови думи могат да се подават в произволен ред. За примери вижте функцията на Basic Replace().

Когато не искате да подавате всички параметри, използвайте аргументи с ключови думи. Предаването на стойности за по-малко параметри по позиция изисква да предоставите стойности за всички параметри преди тях, задължителни или не. Така се осигурява правилната позиция на всяка стойност. Ако подавате параметрите по име, чрез аргументи с ключови думи, можете да пропуснете всички други аргументи между тях.

## Обхват на променливите

Променливите, дефинирани в подпрограма от тип Sub, Function или Property, са валидни само до излизане от подпрограмата. Такива променливи се наричат „локални“. В много случаи е необходимо една променлива да е валидна във всички подпрограми, във всички модули на всички библиотеки или след излизане от подпрограма Sub, Function или Property.

### Деклариране на променливи извън подпрограма Sub, Function или Property

    Global VarName As TYPENAME

Променливата е валидна, докато трае сесията на LibreOffice.

    Public VarName As TYPENAME

Променливата е валидна за всички модули.

    Private VarName As TYPENAME

Променливата е валидна само в този модул.

    Dim VarName As TYPENAME

Променливата е валидна само в този модул.

### Пример за частни променливи

За да направите частните променливи частни за всички модули, задайте CompatibilityMode(True).

      ' ***** Module1 *****
      Private myText As String
      Sub initMyText
          myText = "Здравейте"
          Print "В module1 : ", myText
      End Sub

      ' ***** Module2 *****
      'Option Explicit
      Sub demoBug
          CompatibilityMode( True )
          initMyText
          ' Сега връща празен низ
          ' (или предизвиква грешка за Option Explicit)
          Print "Сега в module2 : ", myText
      End Sub

### Запазване съдържанието на променлива след излизане от подпрограма Sub, Function или Property

      Static VarName As TYPENAME

Променливата запазва стойността си до следващото влизане в съответната подпрограма Function, Sub или Property. Декларацията трябва да е в такава подпрограма.

## Задаване типа на връщаната стойност на функция (Function) или свойство (Property)

Както и при променливите, за да дефинирате типа на връщаната стойност на функция или свойство, добавете знак за деклариране на тип след името на функцията или укажете типа с As и име на тип данни в края на списъка с параметри, например:

      Function WordCount(WordText As String) As Integer

Теми, свързани с показаната

Функция CompatibilityMode()

Оператор Option Explicit

Ключова дума Optional

Оператор Property

Оператор Static