↑  ←  Описание ключевого слова


Func...Return...EndFunc

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

Func functioname ( [Const] [ByRef] $param1, ..., [Const] [ByRef] $paramN, $optionalpar1 = value, ...)
    ...
    [Return [value]]
EndFunc

Параметры

Параметры устанавливаются вами. В дальнейшем, функция вызывается также, как и любая другая встроенная функция.

Примечания

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

Ключевое слово ByRef опционально и указывает, что параметр должен быть интерпретирован, как ссылка на оригинальный объект. По умолчанию, значение параметра копируется в новую переменную. ByRef обычно используется, когда функция работает с большими объёмами данных, поскольку копирование большого числа данных может занять много времени. Обратите внимание, что только объявленные переменные могут быть переданы в качестве параметра ByRef; безымянные временные переменные, такие, как значения, возвращённые функциями, также могут быть переданы в качестве параметра ByRef. Заданную явно константу ("Тест", 15, True и т.д.) нельзя передать в качестве параметра ByRef.

При одновременном использовании ByRef и Const нет разницы, в каком порядке их записывать.

Массивы также могут быть переданы в функции. Для этого в качестве передаваемого параметра следует указать имя массива (без всяких скобок). Для передачи массива в пользовательские функции рекомендуется использовать ключевое слово ByRef, чтобы избежать лишнего копирования всего массива.

Необязательные параметры объявляются присваиванием им значения. Значение может быть глобальной переменной, макросом или явно заданной константой. В описании функции необязательные параметры всегда следуют после всех остальных параметров. Все параметры, следующие после первого необязательного параметра также должны быть необязательными. Внутри функции, узнать число переданных параметров можно, используя макрос @NumParams (см. пример 2).

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

Обратите внимание, что внутри функции нельзя объявить другую функцию.

См. также

SetError, SetExtended, Dim/Global/Local, #include, Const

Пример

Example1()
Example2()

; Пример 1
Func Example1()
    ; Простой скрипт с тремя пользовательскими функциями,
    ; Обратите внимание на переменные, а также ByRef и Return

    Local $foo = 2
    Local $bar = 5
    MsgBox(0, "Сегодня " & today(), "Значение $foo равно " & $foo)
    Swap($foo, $bar)
    MsgBox(0, "После того, как $foo и $bar поменялись местами", "$foo теперь равно " & $foo)
    MsgBox(4096, "И наконец", "Большим из чисел 3 и 4 является " & Max(3, 4) & " :)")
EndFunc

Func swap(ByRef $a, ByRef $b) ;меняет местами значения двух переменных
    Local $t
    $t = $a
    $a = $b
    $b = $t
EndFunc

Func today() ; Возвращает сегодняшнюю дату в форме дд.мм.гггг
    Return (@MDAY & "." & @MON & "." & @YEAR)
EndFunc

Func max($x, $y) ; Возвращает большее из двух чисел
    If $x > $y Then
        Return $x
    Else
        Return $y
    EndIf
EndFunc

; Конец примера 1

; Пример 2
Func Example2()
    ; Простой скрипт с использованием макроса @NumParams
    Test_Numparams(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14)
EndFunc

Func Test_Numparams($v1 = 0, $v2 = 0, $v3 = 0, $v4 = 0, $v5 = 0, $v6 = 0, $v7 = 0, $v8 = 0, $v9 = 0, _
        $v10 = 0, $v11 = 0, $v12 = 0, $v13 = 0, $v14 = 0, $v15 = 0, $v16 = 0, $v17 = 0, $v18 = 0, $v19 = 0)
    #forceref $v1, $v2, $v3, $v4, $v5, $v6, $v7, $v8, $v9, $v10, $v11, $v12, $v13, $v14, $v15, $v16, $v17, $v18, $v19
    Local $val
    For $i = 1 To @NumParams
        $val &= Eval("v" & $i) & " "
    Next
    MsgBox(0, "Пример с @NumParams", "@NumParams =" & @NumParams & @CRLF & @CRLF & $val)
EndFunc

; Конец примера 2