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

# Оператор Function

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

Операторите Sub, Function и Property действат по един и същ начин. Те получават параметри по адрес, позволявайки модифицирането им. За компилатора на LibreOffice Basic използването на съответния им синтаксис за аргументи е взаимозаменяемо.

### Синтаксис:

      [Private | Public] Function Name[char] (argument1 [As Type][, argument2[char][,...]]) [As typename]
              оператори
          [Exit Function]
              оператори
      End Function

### Параметри:

scope: подразбираният обхват на функция е Public. Обхват Private означава подпрограма, вътрешна за модула, която не е предназначена да се използва от други модули.

name: името на подпрограмата, на което се присвоява връщаната от функцията стойност.

arguments: параметри, които да се подават към подпрограмата.

##### фрагмент argument

          {[Optional [ByRef|ByVal]]|ParamArray} argument {{As typename|char}[ = expression]|[()]As Variant}

##### Параметри

Optional: аргументът не е задължителен.

ByRef: аргументът се предава по адрес. ByRef се подразбира.

ByVal: аргументът се предава по стойност. Стойността му може да се променя от извиканата подпрограма.

char: знак за деклариране на тип.

typename: име на примитивен тип данни. Могат да се задават и типове, дефинирани в библиотека или модул.

= expression: задава подразбирана стойност за аргумента, съответстваща на декларирания му тип. Всеки аргумент с указана стойност по подразбиране трябва да е придружен с Optional.

ParamArray: използвайте ParamArray, когато броят на параметрите е неопределен. Типичен пример са дефинираните от потребителя функции за Calc. Употребата на ParamArray трябва да е ограничена до последния аргумент на подпрограмата.

Използването на ParamArray или = expression изисква поставянето на Option Compatible преди изпълнимия програмен код на модула.

Когато се използва Option VBASupport 1, аргументите с Optional и без подразбирана стойност (= expression) се инициализират според своя тип данни, освен ако е Variant.

##### фрагмент typename

          {Boolean|Byte|Currency|Date|Double|Integer|Long|Object|Single|String|Variant}

##### фрагмент char

          { % | & | ! | # | $ | @ }

## Примери:

    Sub ExampleExit
    Dim sReturn As String
    Dim sListArray(10) As String
    Dim siStep As Single
        For siStep = 0 To 10 ' Запълваме масива с тестови данни
            sListArray(siStep) = chr$(siStep + 65)
            MsgBox sListArray(siStep)
        Next siStep
        sReturn = LinSearch(sListArray(), "B")
        Print sReturn
    End Sub

    Function LinSearch( sList(), sItem As String ) As Integer
    Dim iCount As Integer
    ' Linsearch претърсва TextArray:sList() за TextEntry:
    ' Връщаната стойност е индексът на елемента или 0 (Null)
        For iCount=1 To Ubound( sList() )
            If sList( iCount ) = sItem Then
                Exit For ' sItem е намерен
            End If
        Next iCount
        If iCount = Ubound( sList() ) Then iCount = 0
        LinSearch = iCount
    End Function