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

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

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

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

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

Процедурите (SUB) и функциите (FUNCTIONS) ви помагат да структурирате програмата, като я разделите на логически части.

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

## Подаване на променливи към процедури (SUB) и функции (FUNCTION)

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

    Sub SubName(Parameter1 As Type, Parameter2 As Type,...)
    Програмен код
    End Sub

Процедурите се извикват чрез следния синтаксис:

    SubName(Value1, Value2,...)

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

Същото важи и за функциите. Освен това функцията винаги трябва да връща резултат. Той се задава чрез присвояване на стойност на името на функцията:

    Function FunctionName(Parameter1 As Type, Parameter2 As Type,...) As Type
    Програмен код
    ИмеНаФункция = Резултат
    End Function

Обръщението към функция следва следния синтаксис:

    Променлива=ИмеНаФункция(Параметър1, Параметър2,...)

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

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

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

Ако искате да подадете параметър по стойност, поставете ключовата дума „ByVal“ пред името на параметъра, когато пишете обръщение към процедура или функция, например:

    Резултат = Функция(ByVal Параметър)

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

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

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

### Обявяване на променливи извън процедури и функции

    Global ИмеНаПроменлива As ТИП

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

    Public ИмеНаПроменлива As ТИП

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

    Private ИмеНаПроменлива As ТИП

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

    Dim ИмеНаПроменлива As ТИП

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

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

За да направите частните променливи частни за всички модули, задайте 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

### Запазване съдържанието на променливите след завършване на процедура или функция

    Static ИмеНаПроменлива As ТИП

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

## Задаване типа на резултата от функция

Както и с променливите, след името на функцията включете знак за деклариране на или задайте типа с „As“ и съответната ключова дума в края на списъка с параметри. Така задавате типа на резултата на функцията, например:

    Function WordCount(WordText As String) As Integer