Съдържание
Индекс 🔎︎

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

По-долу са описани основите на работа с процедури, функции и свойства в 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) се извиква със следния синтаксис:

      SubName(Value1, Value2,...)

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

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

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

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

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

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

      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

За обръщение към процедура, функция или свойство можете да използвате и напълно квалифицирано име:
Библиотека.Модул.Макрос()
Например, за да извикате макроса 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

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

Променливите, дефинирани в подпрограма от тип 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