Возвращаемые значения
 

Возврат значений


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

Значение функции может быть возвращено тремя способами:

'' Используя имя функции, чтобы установить возвращаемое значение и продолжить выполнение функции:
Function myfunc1() As Integer
   myfunc1 = 1
End Function

'' Использование ключевого слова "Function", чтобы установить возвращаемое значение и продолжить выполнение функции:
Function myfunc2() As Integer
   Function = 2
End Function

'' Использование ключевого слова "Return", чтобы установить возвращаемое значение и сразу же выйти из функции:
Function myfunc3() As Integer
   Return 3
End Function


'' Эта программа демонстрирует функцию, возвращающую значение.

Declare Function myFunction () As Integer

Dim a As Integer

'Здесь мы берем то, что возвращает MyFunction и добавляем 10.
a = myFunction() + 10

'зная, что myFunction возвращает значение 10, мы получаем 10 + 10 = 20 и будет напечатано 20.
Print a 

Function myFunction () As Integer
  'Здесь мы указываем myFunction вернуть 10.
  Function = 10 
End Function


Возвращение по ссылке

Результат функции также может быть возвращен по ссылке, а не по значению. Семантика совершенно различна.

При назначении Byref как результат функции через заявления Function = variable или Return variable функция не копирует переменную для возврата. Вместо этого она возвращает ссылку на эту переменную. Сторона, вызывающая функцию можно изменить переменную через ссылку, возвращенную функцией, без необходимости использовать указатели вручную. Это очень похоже на использование параметра ByRef.

Для получения дополнительной информации обратитесь к: Byref (результаты функций)

Вручную, возвращение указателя как от Byref-функции

Указав ключевое слово ByVal перед переменной результата в заявлениях Function = variable или Return variable, адрес (как правило, хранится в указателе) может быть передан непосредственно как есть, заставляя результат функции по ByRef ссылаться на одну ячейку памяти, указываемую адресом. Например:

Dim Shared i As Integer = 123

Function f( ) ByRef As Integer
    Dim pi As Integer Ptr = @i

    Function = ByVal pi

    '' или, с RETURN он будет выглядеть следующим образом:
    Return ByVal pi
End Function

Print i, f( )


См. также