Module
Contents
Index 🔎︎

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

Далее описано основное использование процедур и функций в LibreOffice Basic.

Когда пользователь создаёт новый модуль, LibreOffice Basic автоматически вставляет процедуру с именем "Main". Это имя по умолчанию никак не влияет на порядок или начальную точку проекта LibreOffice Basic. Данную процедуру можно переименовать.

Существуют некоторые ограничения для имён ваших публичных переменных и функций. Не допускается использование имён совпадающих с именами модулей в библиотеке.

Процедуры (SUBS) и функции (FUNCTIONS) помогают поддерживать структурированное представление посредством разделения программы на логические части.

Одним полезным свойством процедур и функций является то, что после разработки программного кода, содержащего компоненты задач, этот код можно использовать в другом проекте.

## Передача переменных процедурам (SUB) и функциям (FUNCTION)

Переменные могут быть переданы и процедурам, и функциям. Процедуру или функцию необходимо объявить так, чтобы она могла принимать параметры:

    Sub SubName(Parameter1 As Type, Parameter2 As Type,...)

    Программный код

    End Sub

Процедура (SUB) вызывается с помощью следующего синтаксиса:

    SubName(Value1, Value2,...)

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

Такой же процесс применяется к функциям. К тому же, функции всегда возвращают результат выполнения функции. Результат функции определяется путём присвоения возвращаемого значения имени функции:

    Function FunctionName(Parameter1 As Type, Parameter2 As Type,...) As Type

    Программный код

    FunctionName=Result

    End Function

Функция (FUNCTION) вызывается с помощью следующего синтаксиса:

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

Для вызова процедуры или функции можно также использовать полное имя:
Library.Module.Macro()
Например, для вызова макроса автотекста из библиотеки Gimmicks используется следующая команда:
Gimmicks.AutoText.Main()

## Передача переменных с помощью значения или ссылки

Параметры могут быть переданы процедуре или функции либо с помощью ссылки, либо с помощью значения. Если не указано иное, параметр всегда передаётся с помощью ссылки. Это означает, что процедура или функция получает параметр и может читать и изменять его значение.

Если нужно передать параметр с помощью значения, при вызове процедуры или функции вставьте перед параметром ключевое слово "ByVal", например:

    Result = Function(ByVal Parameter)

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

## Область действия переменных

Переменная, определенная в процедуре (SUB) или функции (FUNCTION), остаётся действительной только до выхода из процедуры. Такая переменная называется локальной. Во многих случаях переменная должна быть действительной во всех процедурах, в каждом модуле всех библиотек или после выхода из процедуры или функции.

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

    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 "В модуле 1 : ", myText

    End Sub

    ' ***** Module2 *****

    'Option Explicit

    Sub demoBug

        CompatibilityMode( true )

        initMyText

        ' Возврат пустой строки

        ' (или появляется сообщение об ошибке для Option Explicit)

        print "Теперь в модуле 2 : ", myText

    End Sub

### Сохранение содержимого переменной после выхода из процедуры или функции

    STATIC VarName As TYPENAME

Переменная сохраняет свое значение до следующего входа в эту функцию или процедуру. Объявление переменной должно существовать внутри процедуры или функции.

## Указание типа возвращаемого значения функции

Как и в случае переменных, чтобы определить тип возвращаемого значения функции, включите символ объявления типа после имени функции или тип, обозначенный служебным словом "As", и соответствующее ключевое слово в конце списка параметров. Например:

    Function WordCount(WordText As String) As Integer