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

По-долу са описани основите на работа с процедури и функции в 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

Моля, подкрепете ни!